大浪网站建设 优帮云,网站架构包含哪几个部分,做网页要钱吗,网站宽度设计★ 定制RestTemplate
如要对RestTemplate进行自定义设置#xff0c;Spring Boot也提供了两种主要方式#xff1a;▲ 局部式#xff1a;在调用RestTemplateBuilder构建RestTemplate之前#xff0c;先调用RestTemplateBuilder的方法对其定制#xff0c;通过这种方式设置的R…★ 定制RestTemplate
如要对RestTemplate进行自定义设置Spring Boot也提供了两种主要方式▲ 局部式在调用RestTemplateBuilder构建RestTemplate之前先调用RestTemplateBuilder的方法对其定制通过这种方式设置的RestTemplateBuilder仅对它构建的RestTemplate起作用。▲ 全局式使用RestTemplateCustomizer进行定制所有实现RestTemplateCustomizer接口的Bean会被自动应用到自动配置的RestTemplateBuilder中这种定制方式对整个应用范围的RestTemplate都起作用。之前这个就属于局部式定制
★ 定制RestTemplate主要在如下两方面进行定制
▲ 添加或替换拦截器既可通过 RestTemplateBuilder 的 additionalInterceptors() 或 interceptors() 方法分别添加或替换拦截器。也可直接调用RestTemplate的方法来添加或替换。▲ 添加或替换消息转换器既可通过 RestTemplateBuilder 的 additionalMessageConverters() 或 messageConverters() 方法分别添加或替换拦截器。也可直接调用RestTemplate的方法来添加或替换。全局式定制RestTemplate的代码演示
延用–SpringBoot 使用RestTemplate 整合第三方 RESTful 服务–的代码
全局式定制RestTemplate创建一个 ClientCustomizer 类实现 RestTemplateCustomizer 接口
测试 可以看出 定制的 RestTemplate 的拦截器生效开始执行。
package cn.ljh.app.controller;import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.client.RestTemplateCustomizer;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.web.client.RestTemplate;import java.util.List;//定制 RestTemplateSlf4j
Configuration
public class ClientCustomizer implements RestTemplateCustomizer
{Overridepublic void customize(RestTemplate restTemplate){//在此处即可对容器中自动构建的所有 RestTemplate 进行全局配置//添加HttpMessageConverters消息转换器,先get获取到所有消息转换然后再用 add 进行添加FastJsonHttpMessageConverter messageConverter new FastJsonHttpMessageConverter();//该设置说明FastJsonHttpMessageConverter只处理Json格式的数据messageConverter.setSupportedMediaTypes(List.of(MediaType.APPLICATION_JSON));//这样就添加了自定义的定制的消息转换器-----对象和json之间的转换restTemplate.getMessageConverters().add(messageConverter);//替换原有的拦截器//restTemplate.setInterceptors(List.of());//在原有的拦截器的基础上再添加自己的拦截器//此处可以用 Lambda 表达式来创建拦截器restTemplate.getInterceptors().add((request, body, execution) -{//在这里面自定义拦截器规则log.debug(RestTemplate 的拦截器开始执行);String url request.getURI().getPath();//设置token半小时内有效int time (int) (System.currentTimeMillis() / 1000 1800);//获取请求方法名String methodName request.getMethod().name();//获取请求体数据String strBody new String(body);//此处调用服务器的方法来生成token生成的token需要哪些参数取决于服务器String token generateToken(url, time, methodName, strBody);//设置一个额外的请求头常常需要再授权时要设置额外的请求头//具体要添加什么请求头取决于业务的需要。request.getHeaders().add(X-cn-ljh, token);//继续向下执行return execution.execute(request, body);});}//模拟生成tokenprivate String generateToken(String url, int time, String method, String strBody){return mycustomtoken;}
}pom.xml 需要这个fastjson 依赖用于添加HttpMessageConverters消息转换器