使用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM