Java Spring — перехват выполнения клиента REST (Hystrix Feign)

У меня есть клиентский интерфейс 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 подходящим инструментом для этого?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
101
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Создайте bean-компонент, реализующий feign.RequestInterceptor, и выполняйте там свою работу:

@Component
public class FeignRequestInterceptor implements RequestInterceptor {
  @Override
  public void apply(RequestTemplate template) {
    // your code here
  }
}

См. также этот ответ.

Другие вопросы по теме