투케이2K

55. (spring/스프링) RestTemplate 레스트 템플릿 사용해 http post body json 요청 실시 본문

Spring

55. (spring/스프링) RestTemplate 레스트 템플릿 사용해 http post body json 요청 실시

투케이2K 2022. 6. 29. 11:11

[개발 환경 설정]

개발 툴 : inteli j

개발 언어 : spring

 

[소스 코드]

    // TODO [SEARCH FAST] : [레스트 템플릿 테스트]
    @GetMapping("/REST_TAMPLATE")
    public String REST_TAMPLATE(@RequestParam Map<String, String> param){
        System.out.println("\n");
        System.out.println("================================================");
        System.out.println("[CLASS] : "+String.valueOf(CLASS_NAME));
        System.out.println("[METHOD] : "+String.valueOf("REST_TAMPLATE"));
        System.out.println("[INPUT] : "+String.valueOf(param.toString()));
        System.out.println("================================================");
        System.out.println("\n");


        /**
         * // -----------------------------------------
         * [호출 방법]
         * // -----------------------------------------
         * 1. 호출 방식 : GET
         * // -----------------------------------------
         * 2. 호출 방법 : http://localhost:7000/REST_TAMPLATE
         * // -----------------------------------------
         * 3. 리턴 데이터 : http 요청 리턴 데이터
         * // -----------------------------------------
         * 4. gradle 필요 implementation :
         *
         *   // TODO [RestTemplete http 요청]
         *   implementation 'org.apache.httpcomponents:httpcore:4.4.15'
         *   implementation 'org.apache.httpcomponents:httpclient:4.5.13'
         * // -----------------------------------------
         * */


        // [리턴 데이터 선언 실시]
        HashMap<String, Object> resultMap = new HashMap<String, Object>();


        // [https 요청 객체 선언]
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
        factory.setConnectTimeout(20000); // 커넥션 타임 아웃 설정 20초
        factory.setReadTimeout(20000); // 리드 타임 아웃 설정 20초

        HttpClient httpClient = HttpClientBuilder.create()
                .setMaxConnTotal(50)// 최대 커넥션 수
                .setMaxConnPerRoute(20).build();
        factory.setHttpClient(httpClient);


        // [RestTemplate 객체 선언 실시]
        RestTemplate restTemplate = new RestTemplate(factory);


        // [http 헤더 설정]
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);


        // [BODY JSON 설정]
        /*
        MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
        body.add("userId", 1);
        body.add("id", 1);
        */
        JSONObject body = new JSONObject();
        body.put("userId", 1);
        body.put("id", 1);


        // [헤더와 바디 값을 가진 HttpEntity 객체 생성]
        HttpEntity<String> entity = new HttpEntity<>(body.toString(), headers);


        // [http 요청 수행 주소 및 데이터 설정]
        String url = "http://jsonplaceholder.typicode.com/posts";

        // [맵에 설정 값 추가 : 로그]
        resultMap.put("request url", url);
        resultMap.put("request body", body.toString());

        try {
            // [http 요청 실시 / POST BODY JSON]
            ResponseEntity<Object> response = restTemplate.exchange(url, HttpMethod.POST, entity, Object.class);

            // [http 요청 결과를 Map에 추가]
            resultMap.put("responseStateCode", String.valueOf(response.getStatusCodeValue()));
            resultMap.put("responseBody", String.valueOf(response.getBody()));
        }
        catch (Exception e) {
            e.printStackTrace();

            // [에러 발생 시 map 에 추가 : 로그]
            resultMap.put("exception", String.valueOf(e.getMessage()));
        }


        // [로그 출력 실시]
        System.out.println("\n");
        System.out.println("================================================");
        System.out.println("[CLASS] : "+String.valueOf(CLASS_NAME));
        System.out.println("[METHOD] : "+String.valueOf("REST_TAMPLATE"));
        System.out.println("[RETURN] : "+String.valueOf(resultMap.toString()));
        System.out.println("================================================");
        System.out.println("\n");


        // [Api 리턴 반환]
        return resultMap.toString();
    }
 

[결과 출력]

 

 

반응형
Comments