如何解决SpringBoot如何给FeignClient添加自定义拦截器
在 RestTemplate 中,我有一个自定义拦截器,它会记录一些请求响应的详细信息并保存到数据库中。
我的自定义拦截器:
import org.springframework.http.HttpRequest;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpRequestInterceptor;
@Component
public class LogServices implements ClientHttpRequestInterceptor {
@Override
public ClientHttpResponse intercept(final HttpRequest request,final byte[] body,final ClientHttpRequestExecution execution) throws IOException {
final String uri = request.getURI().toString();
final ClientHttpResponse response = execution.execute(request,body);
//log request response details and save to database
return response;
springboot 中的 RestTemplate bean 配置:
@Bean
public RestTemplate restTemplate(final RestTemplateBuilder restTemplateBuilder) {
return restTemplateBuilder
.setConnectTimeout(Duration.ofMillis(connectTimeout))
.setReadTimeout(Duration.ofMillis(readTimeout))
.build();
将拦截器添加到restTemplate bean:
@Configuration
public class LogInterceptorConfiguration {
@Autowired
public void configureLogger(final RestTemplate restTemplate,final LogServices logServices) {
final var interceptors = restTemplate.getInterceptors();
interceptors.add(logServices);
restTemplate.setInterceptors(interceptors);
}
如何将此拦截器添加到 FeignClient?
在 application.yml 中:
feign:
client:
config:
default:
connectTimeout: 5000
readTimeout: 5000
request-interceptors[0]: com.api.restclient.InterceptorOne
request-interceptors[1]: com.api.log.LogServices
InterceptorOne 为 feign 客户端中的每个请求添加标头:
@Configuration
public class InterceptorOne implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
requestTemplate.header("some-header","value");
}
但我无法添加 LogServices
拦截器,因为它由于错误 cannot be cast to class feign.RequestInterceptor
我的猜测是我尝试添加的拦截器是一个通用拦截器,而不是专门请求拦截器。所以我想知道如何向 FeignClient 添加一个类似于 RestTemplate 的通用拦截器
解决方法
可以添加多个拦截器如下
feign:
client:
config:
feignName:
connectTimeout: 5000
readTimeout: 5000
loggerLevel: full
errorDecoder: com.example.SimpleErrorDecoder
retryer: com.example.SimpleRetryer
requestInterceptors:
- com.example.InterceptorOne
- com.example.LogServices
decode404: false
encoder: com.example.SimpleEncoder
decoder: com.example.SimpleDecoder
contract: com.example.SimpleContract
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。