BackEnd - Spring

Rest API 통신 방법 - HttpURLConnection, RestTemplate

간다12 2024. 10. 22. 16:24

HttpURLConnection 으로 통신하기

 

    1. 원시 HTTP 연결 사용:
      • HttpURLConnection 클래스를 사용하여 HTTP 요청을 직접 생성하고 관리합니다.
      • URL을 사용하여 연결을 열고, 요청 메서드, 헤더, 타임아웃 등을 설정합니다.
      • 요청 본문을 쓰기 위해 BufferedWriter를 사용하고, 응답을 읽기 위해 BufferedReader를 사용합니다.
    2. 예외 처리:
      • SocketTimeoutException, IOException 등을 개별적으로 처리합니다.
      • 연결이 끝난 후 finally 블록에서 연결을 닫습니다.
    3. 직접 JSON 생성:
      • JSONObject와 JSONArray를 사용하여 JSON 요청 본문을 직접 생성합니다.
    4. 응답 처리:
      • 응답 코드를 출력하고, 응답 본문을 StringBuilder를 사용하여 읽습니다.
  • 예시)

        HttpURLConnection conn = null;
        StringBuilder response = new StringBuilder();
        String recvJsonData = "";

        try {
            URL url = new URL(HOST_URL);
            conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setDoOutput(true);
            conn.setConnectTimeout(TIMEOUT);
            conn.setReadTimeout(TIMEOUT);

            try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream(), "UTF-8"))) {
                bw.write(jsonParam);
                bw.flush();
            }

            int responseCode = conn.getResponseCode();
            System.out.println("Response Code: " + responseCode);

            try (BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"))) {
                String responseLine;
                while ((responseLine = br.readLine()) != null) {
                    response.append(responseLine.trim());
                }
            }

            recvJsonData = response.toString();
            System.out.println("Response JSON: " + recvJsonData);

        } catch (SocketTimeoutException ste) {
            System.err.println("Timeout occurred: " + ste.getMessage());
        } catch (IOException ioex) {
            ioex.printStackTrace();
        } finally {
            if (conn != null) {
                conn.disconnect();
            }
        }

 

Spring RestTemplate 으로 통신하기

  1. Spring RestTemplate 사용:
    • RestTemplate 클래스를 사용하여 HTTP 요청을 보냅니다.
    • RestTemplate은 HTTP 요청 및 응답 처리를 더 간단하게 만들어 줍니다.
  2. 헤더 및 요청 본문 설정:
    • HttpHeaders 클래스를 사용하여 HTTP 헤더를 설정합니다.
    • JSONObject와 JSONArray를 사용하여 JSON 요청 본문을 생성합니다.
    • HttpEntity를 사용하여 요청 본문과 헤더를 함께 묶습니다.
  3. 예외 처리:
    • 주석 처리된 부분에서는 HttpClientErrorException, HttpServerErrorException, RestClientException 등을 처리합니다.
    • 예외 처리 부분이 더 구조적이고 구체적입니다.
  4. 응답 처리:
    • restTemplate.postForObject 메서드를 사용하여 POST 요청을 보내고, 응답을 String으로 받습니다.
    • 응답을 출력하고 반환합니다.


        private static final String URL = ""
        private static final String API_KEY = "";

        HttpHeaders headers = new HttpHeaders();
        headers.set("Content-Type", "application/json");
        headers.set("Ocp-Apim-Subscription-Key", API_KEY);

        // JSON 객체 생성
        JSONObject jsonObject = createJsonRequest();
        
        // HTTP 헤더 설정
        HttpHeaders headers = createHttpHeaders();

        HttpEntity<String> requestEntity = new HttpEntity<>(jsonObject.toString(), headers);

        RestTemplate restTemplate = new RestTemplate();
        String response = restTemplate.postForObject(URL, requestEntity, String.class);

        System.out.println("Response: " + response);
    


반응형