Ответ Spring RestController смешивается с сообщением об ошибке PrometheusMeterRegistry - PullRequest
1 голос
/ 13 марта 2019

Конверт: Springboot-2.0.7.RELEASE (встроенный tomcat-8.5.35), JDK-1.8.0_181, микрометр-реестр-прометей-1.0.8

Описание: использование @Timed в методе контроллера и WebMvcMetricsFilter в пользовательском режиме WebMvcTagsProvider.

Демонстрационный проект: https://github.com/kenix/resp-mix

Если PrometheusMeterRegistry уже создал счетчик с набором тегов, он не создаст еще один счетчик с тем же именем и набором других тегов. Выдает IllegalArgumentException с вышеупомянутой причиной. Это происходит после обычной обработки запроса, которая является успешной (ответ теперь имеет преобразованный JSON). Исключение не перехватывается в WebMvcMetricsFilter Spring (то есть перехватывается исключение в его catch -классе. Кстати, ControllerAdvice не помогает), но перехватывается StandardHostValve tomcat, который выдает свое собственное сообщение об ошибке (он не может знать, откуда это исключение) в ответ тоже. Это приводит к недопустимому JSON как результату.

Вопрос 1: должен ли WebMvcMetricsFilter поймать и обработать это Исключение, выданное PrometheusMeterRegistry, и не бросать его дальше?

Вопрос 2: видел, что исключение в цепочке фильтров перед выполнением фактической обработки обрабатывается, как и ожидалось. Как насчет исключения после успешной фактической обработки? Любые ссылки?

Для запуска этого случая:

  1. curl -i localhost:8080/hi/foo/there
  2. curl -i localhost:8080/hi/blah/there

1 Ответ

0 голосов
/ 27 мая 2019

Вопрос 1: Нет, WebMvcTagsProvider обрабатывает исключения HTTP.Вопрос 2: попробуйте использовать ControllerAdvice и перехватите исключение IllegalArgumentException.

...