RestTemplateBuilderを使用してRestTemplateを構成する
1. 前書き
このクイックチュートリアルでは、how to configure a Spring RestTemplate bean.を見ていきます。
まず、3つの主要な構成タイプについて説明します。
-
デフォルトのRestTemplateBuilderを使用
-
RestTemplateCustomizerを使用する
-
独自のRestTemplateBuilderを作成する
これを簡単にテストできるようにするには、how to set up a simple Spring Boot applicationのガイドに従ってください。
2. デフォルトのRestTemplateBuilderを使用した構成
このようにRestTemplateを構成するには、クラスにinject the default RestTemplateBuilder bean provided by Spring Bootを組み込む必要があります。
private RestTemplate restTemplate;
@Autowired
public HelloController(RestTemplateBuilder builder) {
this.restTemplate = builder.build();
}
このメソッドで作成されたRestTemplate beanには、scope limited to the class in which we build itがあります。
3. RestTemplateCustomizerを使用した構成
このアプローチでは、create an application-wide, additive customization.
これは、もう少し複雑なアプローチです。 このために、create a class that implements RestTemplateCustomizer, を実行し、それをBeanとして定義する必要があります。
public class CustomRestTemplateCustomizer implements RestTemplateCustomizer {
@Override
public void customize(RestTemplate restTemplate) {
restTemplate.getInterceptors().add(new CustomClientHttpRequestInterceptor());
}
}
CustomClientHttpRequestInterceptor interceptorは、リクエストの基本的なロギングを行っています。
public class CustomClientHttpRequestInterceptor implements ClientHttpRequestInterceptor {
private static Logger LOGGER = LoggerFactory
.getLogger(CustomClientHttpRequestInterceptor.class);
@Override
public ClientHttpResponse intercept(
HttpRequest request, byte[] body,
ClientHttpRequestExecution execution) throws IOException {
logRequestDetails(request);
return execution.execute(request, body);
}
private void logRequestDetails(HttpRequest request) {
LOGGER.info("Headers: {}", request.getHeaders());
LOGGER.info("Request Method: {}", request.getMethod());
LOGGER.info("Request URI: {}", request.getURI());
}
}
ここで、CustomRestTemplateCustomizer sを構成クラスまたはSpringBootアプリケーションクラスのBeanとして定義します。
@Bean
public CustomRestTemplateCustomizer customRestTemplateCustomizer() {
return new CustomRestTemplateCustomizer();
}
この構成では、every RestTemplate that we’ll use in our application will have the custom interceptor set on it.
4. 独自のRestTemplateBuilderを作成して構成する
これは、RestTemplate. Itdisables the default auto-configuration of RestTemplateBuilder, so we need to define it ourselves:をカスタマイズするための最も極端なアプローチです。
@Bean
@DependsOn(value = {"customRestTemplateCustomizer"})
public RestTemplateBuilder restTemplateBuilder() {
return new RestTemplateBuilder(customRestTemplateCustomizer());
}
この後、デフォルトのRestTemplateBuilderで行うのと同じように、inject the custom builderをクラスに追加し、通常どおりRestTemplateを作成できます。
private RestTemplate restTemplate;
@Autowired
public HelloController(RestTemplateBuilder builder) {
this.restTemplate = builder.build();
}
5. 結論
RestTemplateをデフォルトのRestTemplateBuilderで構成する方法、独自のRestTemplateBuilder,を構築する方法、またはRestTemplateCustomizer Bean.を使用する方法を見てきました。
いつものように、この例の完全なコードベースは、GitHub repositoryにあります。