как получить имя класса контроллера в перехватчиках для регистрации - PullRequest
0 голосов
/ 18 марта 2019

В моем приложении springboot мы регистрируем запросы / ответы контроллера, используя org.springframework.web.util.ContentCachingRequestWrapper и org.springframework.web.util.ContentCachingResponseWrapper. Ниже приведена ссылка для примера кода.

CustomLoggingFilter:

https://stackoverflow.com/a/42023374/1958669

В приложении присутствует interceptor. Теперь проблема состоит в том, чтобы регистрировать только его имя перехватчика, приходящее в className. Итак, для получения фактического имени контроллера я попытался получить имя класса в перехватчике. Но это дает org.springframework.web.util.ContentCachingRequestWrapper.

CustomWebMvcConfig:

@Configuration
public class CustomWebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new CustomLogInterceptor());
    }
}

CustomLogInterceptor:

public class CustomLogInterceptor extends HandlerInterceptorAdapter {
    private static final Logger logger = LogManager.getLogger(CustomLogInterceptor.class);

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception{
        //Some operation
    }
}

Получение логов в следующем формате:

time = "2019-03-18T09: 59: 51,001Z", thread = "[o-auto-1exec-]", class = «a.b.c.CustomLoggingFilter», message = «Payload_1«

time = "2019-03-18T09: 59: 51,001Z", thread = "[o-auto-1-xec-1]", class = «a.b.c.CustomLoggingFilter», message = «Payload_2« »

Мой вопрос: как получить фактическое имя ControllerClass в журналах, а не LoggingFilterClass (тот, который использует org.springframework.web.util.ContentCachingRequestWrapper)

1 Ответ

1 голос
/ 18 марта 2019

Вы можете попробовать:

HandlerMethod handlerMethod = (HandlerMethod) handler;
String controllerName = handlerMethod.getBeanType().getSimpleName().replace("Controller", "");

Или, если вы хотите напечатать URI:

request.getRequestURI();

Я думаю, вы не можете изменить регистратор, так как не знаете, кто будет контроллером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...