문서의 선택한 두 판 사이의 차이를 보여줍니다.
다음 판 | 이전 판 마지막 판 양쪽 다음 판 | ||
springframework:resttemplate [2014/10/29 20:13] kwon37xi 만듦 |
springframework:resttemplate [2021/11/17 13:08] kwon37xi |
||
---|---|---|---|
줄 1: | 줄 1: | ||
====== Spring RestTemplate ====== | ====== Spring RestTemplate ====== | ||
* [[https:// | * [[https:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * see [[springframework: | ||
+ | ===== HttpEntity ===== | ||
+ | * [[http:// | ||
+ | ===== POST에서 파라미터 보내기 ===== | ||
+ | * [[http:// | ||
+ | MultiValueMap< | ||
+ | parameters.add(" | ||
+ | parameters.add(" | ||
+ | HttpHeaders headers = new HttpHeaders(); | ||
+ | headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); | ||
+ | |||
+ | HttpEntity< | ||
+ | |||
+ | // 메시지 컨버터 지정 안했으면 | ||
+ | // List< | ||
+ | // messageConverters.add(new MappingJacksonHttpMessageConverter()); | ||
+ | // messageConverters.add(new FormHttpMessageConverter()); | ||
+ | // restTemplate.setMessageConverters(messageConverters); | ||
+ | |||
+ | LoginResponse response = (LoginResponse) restTemplate.postForObject(url, | ||
+ | |||
+ | // ParemeterizedTypeReference를 사용하여 복잡한 Generic Type 으로 요청 결과 받기 | ||
+ | public ParameterizedTypeReference< | ||
+ | new ParameterizedTypeReference< | ||
+ | |||
+ | restTemplate.exchange(url, | ||
+ | </ | ||
+ | |||
+ | ===== Exception 처리 ===== | ||
+ | * [[https:// | ||
+ | |||
+ | <code java> | ||
+ | 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()); | ||
+ | } | ||
+ | </ | ||
+ | * 기본 구현체인 [[https:// | ||
+ | |||
+ | ===== Interceptor를 통한 로깅 ===== | ||
+ | * [[http:// | ||
+ | // ClientHttpRequestInterceptor 인터페이스를 로깅을 남기게 구현해서 넣어주면 된다. | ||
+ | |||
+ | RestTemplate restTemplate = new RestTemplate(); | ||
+ | restTemplate.setRequestFactory(new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory())); | ||
+ | restTemplate.setInterceptors(Lists.newArrayList(new RestTemplateLoggingInterceptor())); | ||
+ | </ | ||
+ | |||
+ | ===== SpringBoot ===== | ||
+ | * with [[springframework: | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | <code java> | ||
+ | @Bean | ||
+ | public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) { | ||
+ | return restTemplateBuilder | ||
+ | .requestFactory(() -> new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory())) | ||
+ | .setConnectTimeout(Duration.ofMillis(5000)) // connection-timeout | ||
+ | .setReadTimeout(Duration.ofMillis(5000)) // read-timeout | ||
+ | .additionalMessageConverters(new StringHttpMessageConverter(Charset.forName(" | ||
+ | .build(); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== 참조 ===== | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// |