用RestTemplateBuilder配置一个RestTemplate【翻译】

java技术文章

2018-12-06

461

2

我仅仅宣布spring boot2的一个新的功能,开始用spring搭建REST

1、介绍

在这个简短的文章中,我们将要查看怎样配置一个spring RestTemplate bean。
让我们开始讨论3个主要的配置类型。
  • 使用默认的RestTemplateBuilder
  • 使用一个RestTemplateCustomizer
  • 创建我们的RestTemplateBuilder
为了更容易的测试,请按照指导《怎样安装一个简单的spring boot应用程序》, how to set up a simple Spring Boot application.
 

2、配置使用默认的RestTemplateBuilder

为了配置一个RestTemplate 这个方法,我们需要在我们的类中注入spring boot提供默认的RestTemplateBuilder bean
private RestTemplate restTemplate;
 
@Autowired
public HelloController(RestTemplateBuilder builder) {
    this.restTemplate = builder.build();
}
RestTemplate使用这个方法创建,但是它的范围仅限制于我们创建的类中。

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 bean或者在我们的spring boot application类中。
@Bean
public CustomRestTemplateCustomizer customRestTemplateCustomizer() {
    return new CustomRestTemplateCustomizer();
}
在这个配置中,在我们的应用中我们使用的每一个RestTemplate 都将设置自定义拦截器。
 

4、配置创建我们自己的RestTemplateBuilder

这是一个创建RestTemplate极致的途径。RestTemplateBuilder自动配置默认是禁用的,因此我们需要手工配置它:
@Bean
@DependsOn(value = {"customRestTemplateCustomizer"})
public RestTemplateBuilder restTemplateBuilder() {
    return new RestTemplateBuilder(customRestTemplateCustomizer());
}
在这之后,我们就像使用默认的RestTemplateBuilder一样注入自定义builder,并且创建一个普通RestTemplate。
private RestTemplate restTemplate;
 
@Autowired
public HelloController(RestTemplateBuilder builder) {
    this.restTemplate = builder.build();
}

5、结论

我们看到,怎样用默认的RestTemplateBuilder配置一个RestTemplate ,构建我们自己的RestTemplateBuilder或者使用一个RestTemplateCustomizer bean
和往常一样,这个实例完整的代码可以从这里下载: GitHub repository.

发表评论

全部评论:2条

网友 2019-06-22

Mark

网友 2019-06-22

Mark

鸿福951

努力打造一个好用的webui

热评文章

推荐文章