[백엔드/Java] HTTP통신 JSON 데이터 요청 및 응답 처리 개념 및 샘플코드

    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
    반응형

    댓글