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

2023. 10. 3. 23:34
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
반응형

BELATED ARTICLES

more