내용으로 건너뛰기
권남
사용자 도구
로그인
사이트 도구
검색
도구
문서 보기
이전 판
역링크
최근 바뀜
미디어 관리자
사이트맵
로그인
>
최근 바뀜
미디어 관리자
사이트맵
추적:
springframework:resttemplate
이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요.
====== Spring RestTemplate ====== * [[https://spring.io/blog/2009/03/27/rest-in-spring-3-resttemplate|Rest in Spring 3 RestTemplate]] * [[http://www.baeldung.com/rest-template|Spring RestTemplate Tutorial]] * [[http://www.baeldung.com/spring-rest-template-list|Get and Post Lists of Objects with RestTemplate | Baeldung]] * [[https://www.baeldung.com/spring-rest-template-builder|Configure a RestTemplate with RestTemplateBuilder | Baeldung]] * [[https://howtodoinjava.com/spring-boot2/resttemplate/|Spring Boot RestTemplate Tutorials - HowToDoInJava]] * see [[springframework:feign|Fegin]] ===== HttpEntity ===== * [[http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/HttpEntity.html|org.springframework.http.HttpEntity]] HTTP 데이터를 세심하게 제어한다. ===== POST에서 파라미터 보내기 ===== * [[http://stackoverflow.com/questions/11579621/spring-resttemplate-postforobject-with-header-webservice-cant-find-my-header-p|java - Spring RestTemplate postForObject with Header: webservice can't find my header parameters]]<code java> 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(); </code> ===== Exception 처리 ===== * [[https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/ResponseErrorHandler.html|ResponseErrorHandler]]를 사용하여 예외를 일관성 있게 처리할 수 있다. [[https://stackoverflow.com/questions/38093388/spring-resttemplate-exception-handling|rest - Spring Resttemplate exception handling]] <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()); } </code> * 기본 구현체인 [[https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/DefaultResponseErrorHandler.html|DefaultResponseErrorHandler]]를 상속하여 필요한 메소드만 override 해도 된다. ===== Interceptor를 통한 로깅 ===== * [[http://eclipse4j.tistory.com/282|Spring RestTemplate 에서 로그 처리]]<code java> // ClientHttpRequestInterceptor 인터페이스를 로깅을 남기게 구현해서 넣어주면 된다. RestTemplate restTemplate = new RestTemplate(); restTemplate.setRequestFactory(new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory())); // body 스트림을 소모해버리지 않게 복제 restTemplate.setInterceptors(Lists.newArrayList(new RestTemplateLoggingInterceptor())); // RestTemplateLoggingInterceptor는 로그를 남기는 구현. body를 읽어버림. </code> ===== SpringBoot ===== * with [[springframework:springboot|SpringBoot]] * ''org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration'' * ''RestTemplateBuilder'' 가 존재하지 않을 경우 생성해준다. * ''RestTemplate'' 자체는 생성해주지 않고 Builder 만 만들어준다. * ''RestTemplateCustomizer'', ''RestTemplateRequestCustomizer'' Bean 들을 통해 조정해준다. <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("UTF-8"))) .build(); } </code> ===== 참조 ===== * [[https://www.baeldung.com/spring-resttemplate-logging|Spring RestTemplate Request/Response Logging | Baeldung]] * [[https://enterkey.tistory.com/275|Spring에서 RestTemplate을 사용하여 REST 기반 서비스 요청과 테스트하기 - Hello World]] * [[https://luvstudy.tistory.com/78|RestTemplate 응답 log 확인하기]] * [[https://reflectoring.io/spring-resttemplate/|Complete Guide to Spring RestTemplate]]
springframework/resttemplate.txt
· 마지막으로 수정됨: 2022/01/14 15:43 저자
kwon37xi
문서 도구
문서 보기
이전 판
역링크
맨 위로