[Java] 5. Spring RestTemplate - Http API Request


Spring RestTemplate - Http API Request 요청


Java - HttpURLConnection


spring 3.0 부터 지원하며, 스프링에서 RESTful 형태로 제공하며 HTTP 응답을 객체 타입으로 변환하여 HTTP 요청을 수행하는 동기 클라이언트이다.
Java, Apache HttpComponents, OkHttp 를 지원하며 기계적이고 반복적인 코드가 줄어든다.



RestTemplate Post

postForEntity()

ResponseEntity 객체로 데이터를 받을 수 있다

JSONObject params = new JSONObject();
params.put("param1", "data1");
params.put("param2", "data2");

//MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<Board> request = new HttpEntity<>(params, headers);

ResponseEntity<Board> response = new RestTemplate().postForEntity(url, request, Board.class);
log.info("## response.getHeaders()={}", response.getHeaders());
log.info("## response.getBody()={}", response.getBody());


postForObject() 해더 포함해서 보내기

Object 객체로 데이터를 받을 수 있다

JSONObject params = new JSONObject();
params.put("param1", "data1");
params.put("param2", "data2");

//MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<Board> request = new HttpEntity<>(params, headers);

Board board = new RestTemplate().postForObject(url, request, Board.class);
log.info("## board={}", board);



RestTemplate Get

getForEntity()

ResponseEntity 객체로 데이터를 받을 수 있다

ResponseEntity<Board> response = new RestTemplate().getForEntity(url + "/board/{id}", Board.class, 3);
log.info("## response.getHeaders()={}", response.getHeaders());
log.info("## response.getBody()={}", response.getBody());


MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
params.put("param1", "data1");
params.put("param2", "data2");

ResponseEntity<Board> response = new RestTemplate().getForEntity(url + "/board/{id}", Board.class, params);
log.info("## response.getHeaders()={}", response.getHeaders());
log.info("## response.getBody()={}", response.getBody());



RestTemplate Exchange

Exchange()

4.5.1 Exchange()로 HTTP GET 메서드 실행하기

RestTemplate에서 getForEntity/postForEntity 등 제공하는 메서드와 달리 여러 Http Method를 처리 할 수 있게 제공하는 메서드이다. 추가적인 유연성을 제공하며, 스프링 RestTemplate를 다시 커스텀 래핑을 통해 공통적으로 활용에 용이하다.

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<Board> request = new HttpEntity<>(params, headers);

ResponseEntity<Board> response = restTemplate.exchange(url + "/board/{id}", HttpMethod.GET, request, Board.class, 3);

[참고]

  • https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html