Configure a RestTemplate with RestTemplateBuilder – 用RestTemplateBuilder配置一个RestTemplate

最后修改: 2018年 6月 7日

1. Introduction


In this quick tutorial, we’re going to look at how to configure a Spring RestTemplate bean.


Let’s start by discussing the three main configuration types:


  • using the default RestTemplateBuilder
  • using a RestTemplateCustomizer
  • creating our own RestTemplateBuilder

To be able to test this easily, please follow the guide on how to set up a simple Spring Boot application.

为了能够轻松地进行测试,请遵循如何设置一个简单的Spring Boot应用程序的指南。

2. Configuration Using the Default RestTemplateBuilder


To configure a RestTemplate this way, we need to inject the default RestTemplateBuilder bean provided by Spring Boot into our classes:

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

private RestTemplate restTemplate;

public HelloController(RestTemplateBuilder builder) {
    this.restTemplate =;

The RestTemplate bean created with this method has its scope limited to the class in which we build it.


3. Configuration Using a RestTemplateCustomizer


With this approach, we can create an application-wide, additive customization.


This is a slightly more complicated approach. For this we need to create a class that implements RestTemplateCustomizer, and define it as a bean:


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

The CustomClientHttpRequestInterceptor interceptor is doing basic logging of the request:


public class CustomClientHttpRequestInterceptor implements ClientHttpRequestInterceptor {
    private static Logger LOGGER = LoggerFactory

    public ClientHttpResponse intercept(
      HttpRequest request, byte[] body, 
      ClientHttpRequestExecution execution) throws IOException {
        return execution.execute(request, body);
    private void logRequestDetails(HttpRequest request) {"Headers: {}", request.getHeaders());"Request Method: {}", request.getMethod());"Request URI: {}", request.getURI());

Now, we define CustomRestTemplateCustomizer as a bean in a configuration class or in our Spring Boot application class:

现在,我们将CustomRestTemplateCustomizer定义为配置类或Spring Boot应用类中的一个bean。

public CustomRestTemplateCustomizer customRestTemplateCustomizer() {
    return new CustomRestTemplateCustomizer();

With this configuration, every RestTemplate that we’ll use in our application will have the custom interceptor set on it.


4. Configuration by Creating Our Own RestTemplateBuilder


This is the most extreme approach to customizing a RestTemplate. It disables the default auto-configuration of RestTemplateBuilder, so we need to define it ourselves:


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

After this, we can inject the custom builder into our classes like we’d do with a default RestTemplateBuilder and create a RestTemplate as usual:


private RestTemplate restTemplate;

public HelloController(RestTemplateBuilder builder) {
    this.restTemplate =;

5. Conclusion


We’ve seen how to configure a RestTemplate with the default RestTemplateBuilder, building our own RestTemplateBuilder, or using a RestTemplateCustomizer bean.


As always, the full codebase for this example can be found in our GitHub repository.

一如既往,这个例子的完整代码库可以在我们的GitHub 仓库中找到。