Как использовать симметричный перехватчик / декодер для записи запроса - ответа в произвольном формате? - PullRequest
0 голосов
/ 11 июля 2019

Я разрабатываю специальную структуру ведения журнала для Springboot для регистрации запросов и ответов rest-шаблона и работает нормально.Я пытаюсь реализовать то же самое для 'Feign-Client' и столкнулся с парой проблем.

  1. Для ведения журнала запросов использую FeignRequestInterceptor и работает нормально, единственная проблема здесь - я не могу полностью удалитьURL запроса.Ниже метод дает мне только относительный URL.

requestTemplate.url()

Чтобы зарегистрировать ответ, я смог найти только один способ - ResponseDecoder.Там я могу получить все, кроме полезной нагрузки.При доступе к полезной нагрузке из
  String payload = new String(IOUtils.toByteArray(is));

вышеуказанный метод работает, но исходный поток закрывается, из-за чего ведение журнала происходит нормально, но клиент выдает исключение при возврате ответа.

'при попытке открыть закрытый поток '

Я хотел бы получить предложения, если есть более эффективные способы регистрации ответа на запрос в Feign, подобные Spring rest-template.Или, если метод, который я выбрал, подойдет, помогите мне решить описанные выше проблемы.

1 Ответ

0 голосов
/ 18 июля 2019

Вы можете настроить пользовательский экземпляр feign.Logger для обработки этого.Есть два встроенных JavaLogger, которые используют java.util.logging и Slf4JLogger, которые используют slf4j.Вы можете создать свою собственную реализацию регистратора, расширив feign.Logger и зарегистрировав его как @Bean.

. Этот регистратор должен быть выбран Spring и зарегистрирован в вашем FeignClient.Вот базовый класс Logger, с которого можно начать:

protected abstract void log(String configKey, String format, Object... args);

Создайте свой собственный экземпляр, реализуйте этот метод, и он будет вызываться до запроса и после возврата ответа.Нет необходимости обновлять перехватчик или создавать ответный декодер.

...