728x90
반응형
HTTP 통신
1) 하이퍼텍스트 전송 프로토콜. 웹에서 데이터를 전송하고 검색하는 데 사용되는 프로토콜 중 하나
2) 애플리케이션에서 데이터를 주고받는 데 핵심적인 역할
3) Java에서 HTTP 통신을 수행하기 위해서는 주로 HttpURLConnection 또는 HttpClient와 같은 라이브러리를 사용
HTTP 메소드
1) GET: 리소스를 가져오기 위해 사용됨
2) POST: 서버에 데이터를 제출하기 위해 사용됨
3) PUT: 리소스를 업데이트하기 위해 사용됨
4) DELETE: 리소스를 삭제하기 위해 사용됨
※그 외 다른 메서드도 있지만 주로 GET/POST가 일반적으로 가장 많이 사용됨
JSON
1) "JavaScript Object Notation"의 약어로, 데이터 교환을 위한 경량의 형식
2) 주로 웹에서 데이터를 주고받거나 저장하는 데 사용
3) 키-값 쌍의 집합으로 구성되며, 중괄호 {} 안에 각 키-값 쌍이 위치
HTTP통신 JSON 데이터 요청 및 응답처리 샘플코드
1)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
* @category Util
* @author Develog For AA
* @since 2023.10.03
* @version 1.0
* HTTP통신 JSON 데이터 요청 및 응답 처리
*/
public class InterfaceUtil {
private static Logger logger = LoggerFactory.getLogger(InterfaceUtil.class);
@SuppressWarnings("finally")
public static Map<String, Object> httpConnWithJSON(String url, Map<String, String> paramMap) {
// Output Instance
Map<String, Object> output = new HashMap<>();
try {
/*
* @Desc
* 1.GET으로 요청을 보내므로 URL뒤에 파라미터를 붙여줌
*/
StringBuffer paramStr = new StringBuffer();
paramStr.append(url);
paramMap.forEach((key, value) -> {
if (paramMap.size() != 0)
paramStr.append("&");
paramStr.append(key).append("=").append(value);
});
/*
* @Desc
* 2.HTTP 헤더에 HTTP 메소드를 GET으로 설정
* 3.JSON으로 요청 및 응답을 처리하므로 HTTP 헤더에 "content-type=application/json"을 설정
*/
URL targetUrl = new URL(paramStr.toString());
HttpURLConnection conn = (HttpURLConnection)targetUrl.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("content-type", "application/json");
/*
* @Desc
* 4.응답코드를 확인. 200이면 정상
* 5.JSON으로 전달받은 응답전문을 UTF-8로 파싱 후 확인
*/
int responseCode = conn.getResponseCode();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
StringBuffer responseData = new StringBuffer();
String inputLine;
while ((inputLine = bufferedReader.readLine()) != null)
responseData.append(inputLine);
bufferedReader.close();
logger.info("responseCode: {}", responseCode);
logger.info("responseData.toString(): {}", responseData.toString());
/*
* @Desc
* 6.파싱한 전문을 원하는 객체로 파싱
*/
ObjectMapper objMapper = new ObjectMapper();
output = objMapper.readValue(responseData.toString(), HashMap.class);
} catch (MalformedURLException mue) {
mue.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
return output;
}
}
}
728x90
반응형
'백엔드 > 자바' 카테고리의 다른 글
[자바/Gradle] build.gradle dependency Configuration (0) | 2024.05.12 |
---|---|
Optional.findAny Optional.findFirst 개념 및 샘플코드 (0) | 2023.11.15 |
[BE/Java] JSON To DTO 파싱 개념 및 샘플코드 (0) | 2023.08.19 |
[BE/Java] Optional 개념 및 샘플코드 (0) | 2023.07.26 |
[BE/Java] Stream.map().collect() 개념 및 샘플코드 (0) | 2023.07.22 |
댓글