RestTemplateBuilderでRestTemplateを設定する

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にあります。