У меня есть клиентский интерфейс REST, подобный этому:
public interface NameSearchClient {
@RequestLine("POST")
@Headers("Content-Type: application/json")
SearchResponse searchByName(NameSearchRequest request);
}
Он реализуется и настраивается в фабричном классе следующим образом:
@Component
public class NameClientFactory {
public <T> T createFeignClient(Class<T> clientClass, String apiUrl) {
return Feign.builder()
.encoder(new GsonEncoder())
.decoder(new GsonDecoder())
.target(clientClass, apiUrl);
}
}
Мне было интересно, можно ли написать аннотацию Aspect, которая при каждом вызове, сделанном этим клиентом, выполняет какое-то действие (еще один вызов HTTP в моем случае) и добавляет новый заголовок к запросу? Является ли AspectJ подходящим инструментом для этого?




Создайте bean-компонент, реализующий feign.RequestInterceptor, и выполняйте там свою работу:
@Component
public class FeignRequestInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate template) {
// your code here
}
}
См. также этот ответ.