知識庫 / HTTP Client-Side RSS 訂閱

使用 RestTemplateBuilder 配置 RestTemplate

HTTP Client-Side,Spring Web
HongKong
10
02:00 PM · Dec 06 ,2025

1. 簡介

本快速教程將介紹如何配置 Spring 中的 <em RestTemplate</em>> Bean。

首先,我們討論一下三種主要的配置類型:

  • 使用默認的 <em RestTemplateBuilder</em>>
  • 使用 <em RestTemplateCustomizer</em>>
  • 創建自定義的 <em RestTemplateBuilder</em>>

為了方便測試,請按照如何設置簡單 Spring Boot 應用程序的指南進行操作。

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. 結論

我們已經瞭解瞭如何使用默認的 <em >RestTemplateBuilder</em> 配置 <em >RestTemplate</em>,構建自定義的 <em >RestTemplateBuilder</em>,或者使用 <em >RestTemplateCustomizer</em> Bean。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.