[스프링 REST 클라이언트]_02_커스터마이징
스프링 REST 클라이언트 2부: 커스터마이징
RestTemplate
- 기본으로 java.net.HttpURLConnection 사용.
- 커스터마이징
- 로컬 커스터마이징
- 글로벌 커스터마이징
- RestTemplateCustomizer
- 빈 재정의
WebClient
- 기본으로 Reactor Netty의 HTTP 클라이언트 사용.
- 커스터마이징
- 로컬 커스터마이징
- 글로벌 커스터마이징
- WebClientCustomizer
- 빈 재정의
WebClient 커스터마이징
builder
와 build()
를 호출하기 전에 커스터마이징 할 수 있다.
로컬 커스터마이징
@Override
public void run(ApplicationArguments args) throws Exception {
WebClient webClient = builder
.baseUrl("http://localhost:8080")
.build();
}
글로벌 커스터마이징
WebClientCustomizer
를 빈으로 등록해주면 된다.
모든 빌더가 다음 설정된 상태로 다른 빈들에 주입이 된다.
@SpringBootApplication
public class SpringbootrestApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootrestApplication.class, args);
}
@Bean
public WebClientCustomizer webClientCustomizer() {
return new WebClientCustomizer() {
@Override
public void customize(WebClient.Builder webClientBuilder) {
webClientBuilder.baseUrl("http://localhost:8080");
}
};
}
}
→ 스프링부트가 WebClientAutoConfiguration으로 만들어주는 빌더가 webClientCustomize에 webClientBuilder
로 들어온다.
이게 싫다면 WebClientCustomizer말고 빌더 자체를 빈으로 등록해서 사용해도 된다.
RestTemplate 커스터마이징
RestTemplate가 밑단에서 사용하는 API는 기본으로 java.net.HttpURLConnection 사용한다.
이를 Apache HttpClient로 변경해서 쓸 수 있다.
-
httpclient 의존성 추가
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> </dependency>
-
RestTemplateCustomizer
빈으로 등록RequestFactory를 설정해주면 된다. 원하는 구현체에 맞는 Adapter형식의 RequestFactory가 있다. (스프링의 PSA가 잘 적용되어있는 부분이다.)
@Bean public RestTemplateCustomizer restTemplateCustomizer() { return new RestTemplateCustomizer() { @Override public void customize(RestTemplate restTemplate) { restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory()); } }; }