In RestTemplate I have a custom interceptor which will log some request response details and saves to database.
my custom Interceptor:
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;
RestTemplate bean configuration in springboot:
@Bean
public RestTemplate restTemplate(final RestTemplateBuilder restTemplateBuilder) {
return restTemplateBuilder
.setConnectTimeout(Duration.ofMillis(connectTimeout))
.setReadTimeout(Duration.ofMillis(readTimeout))
.build();
Add the interceptor to 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);
}
How can I add this interceptor to FeignClient?
In 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 which adds a header to every request in feign client:
@Configuration
public class InterceptorOne implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
requestTemplate.header("some-header", "value");
}
But I cannot add the LogServices interceptor since it does not work due to the error cannot be cast to class feign.RequestInterceptor
My guess is that the interceptor I am trying to add is a generic interceptor and not specifically request interceptor. So I want to know how do I add a generic interceptor to FeignClient similar to RestTemplate