使用RestTemplateBuilder配置RestTemplate

简介

在速教程中,我们将了解如何配置Spring  RestTemplate  bean。

让我们首先讨论三种主要配置类型:

  • 使用默认的RestTemplateBuilder
  • 使用RestTemplateCustomizer
  • 创建我们自己的RestTemplateBuilder

2.使用默认RestTemplateBuilder进行配置

要以这种方式配置RestTemplate,我们需要 Spring Boot提供的默认RestTemplateBuilder bean 注入到我们的类中:

private RestTemplate restTemplate;
 
@Autowired
public HelloController(RestTemplateBuilder builder) {
    this.restTemplate = builder.build();
}
 

使用此方法创建RestTemplate  bean的范围仅限于我们构建它的类

3.使用RestTemplateCustomizer进行配置 

通过这种方法,我们可以创建一个应用程序范围的定制。

这是一种稍微复杂的方法。为此,我们需要创建一个实现RestTemplateCustomizer 的类并将其定义为bean:

public class CustomRestTemplateCustomizer implements RestTemplateCustomizer {
    @Override
    public void customize(RestTemplate restTemplate) {
        restTemplate.getInterceptors().add(new CustomClientHttpRequestInterceptor());
    }
}
 

该  CustomClientHttpRequestInterceptor 拦截器用来记录请求的日志:

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 定义  为配置类或Spring Boot应用程序类中的bean:

@Bean
public CustomRestTemplateCustomizer customRestTemplateCustomizer() {
    return new CustomRestTemplateCustomizer();
}
 

使用此配置,应用程序中使用的每个RestTemplate都将存在此自定义拦截器。

4.通过创建我们自己的RestTemplateBuilder进行配置

这是自定义RestTemplate的最极端方法 它  禁用了RestTemplateBuilder的默认自动配置  因此我们需要自己定义它:

@Bean
@DependsOn(value = {"customRestTemplateCustomizer"})
public RestTemplateBuilder restTemplateBuilder() {
    return new RestTemplateBuilder(customRestTemplateCustomizer());
}
 

在此之后,我们可以将自定义构建器注入到我们的类中,就像我们使用默认的RestTemplateBuilder一样,  并像往常一样创建RestTemplate

private RestTemplate restTemplate;
 
@Autowired
public HelloController(RestTemplateBuilder builder) {
    this.restTemplate = builder.build();
}
 

5.结论

我们已经看到了如何配置RestTemplate使用默认RestTemplateBuilder,建立我们自己的RestTemplateBuilder,或使用RestTemplateCustomizer bean

原文地址:https://www.cnblogs.com/gc65/p/10645825.html