Как напечатать имя метода Controller в @ControllerAdvice? - PullRequest
0 голосов
/ 23 января 2020

Я перешел по ссылке: Как найти имя контроллера в @controllerAdvice или @RestControllerAdvice весной MVC? много раз, но я хочу получить имя метода Controller в классе @ControllerAdvice.

Вот мой класс CustomHandler.

@ControllerAdvice
public class CustomExceptionHandler extends ResponseEntityExceptionHandler {
    ........
    ..........
    ..........

    @ExceptionHandler({DataExistsException.class})
    public ResponseEntity<Object> handleDataExistsException(RuntimeException e, WebRequest request, HttpServletRequest httpRequest, HttpServletResponse response, HandlerMethod handlerMethod) {
        // Here I am looking to print Controller endpoint method name

        LoggingUtil.printJsonReq(httpRequest, HttpStatus.valueOf("BAD_REQUEST").value(), LoggingUtil.getTime(httpRequest), null, response);
        return handleExceptionInternal(e, getErrors(error), getHeaders(), HttpStatus.BAD_REQUEST, request);
    }
}

Ответы [ 2 ]

0 голосов
/ 23 января 2020

вы можете узнать имя метода из RuntimeException, чтобы оно было

 e.getStackTrace()[0].getMethodName();
0 голосов
/ 23 января 2020

HandlerMethod должен предоставить вам эту информацию. Цитирование документации:

Инкапсулирует информацию о методе обработчика, состоящем из метода и bean . Предоставляет удобный доступ к параметрам метода, возвращаемому значению метода, аннотациям метода и т. Д. c.

Таким образом, вы можете использовать:

Method method = handlerMethod.getMethod();
...