[Java] 5. Spring RestTemplate - Http API Request
in Java on Java 개발 기록
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