zoukankan      html  css  js  c++  java
  • 使用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

  • 相关阅读:
    关于View的onMeasure()、onSizeChanged()、onLayout()、onDraw()调用顺序
    Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
    Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
    自定义View经常重写的方法
    为自己的自定义View添加额外属性
    自定义View常用的获取宽高信息
    用工厂流水线的方式来理解 RxJava 的概念
    发布开源项目到Maven 中心仓库
    Android应用架构之Retrofit使用
    docker新手入门(基本命令以及介绍)
  • 原文地址:https://www.cnblogs.com/gc65/p/10645825.html
Copyright © 2011-2022 走看看