문서의 이전 판입니다!
MultiValueMap<String, String> parameters = new LinkedMultiValueMap<String, String>(); parameters.add("companyId", companyId); parameters.add("password", password); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(parameters, headers); // 메시지 컨버터 지정 안했으면 // List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>(); // messageConverters.add(new MappingJacksonHttpMessageConverter()); // messageConverters.add(new FormHttpMessageConverter()); // restTemplate.setMessageConverters(messageConverters); LoginResponse response = (LoginResponse) restTemplate.postForObject(url, request, LoginResponse.class); // ParemeterizedTypeReference를 사용하여 복잡한 Generic Type 으로 요청 결과 받기 public ParameterizedTypeReference<Map<Long, LoginUser>> loginUserMapType = new ParameterizedTypeReference<Map<Long, LoginUser>>() { }; restTemplate.exchange(url, HttpMethod.POST, request, loginUserMapType).getBody();
public class MyErrorHandler implements ResponseErrorHandler { @Override public void handleError(ClientHttpResponse response) throws IOException { // your error handling here } @Override public boolean hasError(ClientHttpResponse response) throws IOException { // ... } } // [...] public static void main(String args[]) { RestTemplate restTemplate = new RestTemplate(); restTemplate.setErrorHandler(new MyErrorHandler()); }
// ClientHttpRequestInterceptor 인터페이스를 로깅을 남기게 구현해서 넣어주면 된다. RestTemplate restTemplate = new RestTemplate(); restTemplate.setRequestFactory(new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory())); // body 스트림을 소모해버리지 않게 복제 restTemplate.setInterceptors(Lists.newArrayList(new RestTemplateLoggingInterceptor())); // RestTemplateLoggingInterceptor는 로그를 남기는 구현. body를 읽어버림.