一、概述
@FeignClient注解是Spring Cloud中的一个注解,使用该注解,可以简化我们发送请求时的代码书写。
本文主要讲述如何给@FeignClient配置请求和响应拦截器,方便我们在发起请求前对请求的请求头进行设置以及对响应数据的操作。
二、配置流程
1、创建请求拦截类
请求拦截类
/**
* 接口请求拦截器
*/
public class FeignClientInterceptor implements RequestInterceptor {
/**
* 请求前会调用这个方法
* @param requestTemplate 请求模板对象
*/
@Override
public void apply(RequestTemplate requestTemplate) {
// 设置请求头
requestTemplate.header("header1", "header1Value");
requestTemplate.header("header2", "header2Value");
requestTemplate.header("header3", "header3Value");
}
}
2、创建响应拦截类
响应拦截类
/**
* 接口响应拦截器
*/
public class FeignClientDecoder implements Decoder {
final Decoder delegate;
public FeignClientDecoder(Decoder delegate) {
Objects.requireNonNull(delegate, "Decoder must not be null. ");
this.delegate = delegate;
}
@Override
public Object decode(Response response, Type type) throws IOException, DecodeException, FeignException {
// 读取响应结果
String resultStr = IOUtils.toString(response.body().asInputStream(), StandardCharsets.UTF_8);
// 对响应结果进行处理
// ...
// 回写body,因为response的流数据只能读一次,这里回写后重新生成response
return delegate.decode(response.toBuilder().body(resultStr, StandardCharsets.UTF_8).build(), type);
}
}
3、创建FeignConfig
将上述创建请求和响应拦截类注入到Spring IOC容器中。
FeignClient配置类
public class FeignClientConfig {
@Autowired
private ObjectFactory<HttpMessageConverters> messageConverters;
/**
* 配置请求拦截器
* @return
*/
@Bean
FeignClientInterceptor feignClientInterceptor(){
return new FeignClientInterceptor();
}
/**
* 配置解码器(响应拦截器)
* @return
*/
@Bean
Decoder decoder(){
return new FeignClientDecoder(new OptionalDecoder(new ResponseEntityDecoder(new SpringDecoder(this.messageConverters))));
}
}
三、使用示例
直接将@FeignClient注解的configuration属性赋值为FeignClientConfig.class即可。
使用示例
@FeignClient(value = "MemberEquipmentClient", url = "http://localhost:8080", configuration = FeignClientConfig.class)
public interface MemberEquipmentClient {
312

被折叠的 条评论
为什么被折叠?



