Пользовательский обработчик исключений для статуса NotFound - PullRequest
0 голосов
/ 20 июня 2020

Я хочу реализовать собственный обработчик исключений для состояния NotFoundException для Spring Boot:

@ExceptionHandler({ AccessDeniedException.class, NotFoundException.class })
public ResponseEntity<ErrorResponseDTO> accessDeniedExceptionHandler(final AccessDeniedException ex) {
    ......
}

Я не могу найти правильный импорт для NotFoundException Знаете ли вы, какое исключение является правильным импортом в таком случае?

Ответы [ 2 ]

1 голос
/ 20 июня 2020

Либо добавьте обработчик исключений для NoHandlerFoundException:

@ExceptionHandler(NoHandlerFoundException.class)
public ResponseEntity<ErrorResponseDto> handle(NoHandlerFoundException e) {
    // ...
}

Или попросите ваш совет контроллера расширить ResponseEntityExceptionHandler и переопределить handleNoHandlerFoundException метод.

Между прочим, ваш фрагмент кода объявляет обработчик для двух разных исключений, в то время как параметр метода final AccessDeniedException ex явно ожидает исключения типа AccessDeniedException. Я бы предложил либо объявить несколько методов-обработчиков, либо вместо этого обобщить параметр на Exception.

0 голосов
/ 20 июня 2020

Я согласен с @Michiel on, параметр метода (AccessDeniedException ex) должен быть родительским классом для следующих классов:

  1. AccessDeniedException
  2. NotFoundException

попробуйте это

@ExceptionHandler({ AccessDeniedException.class, NotFoundException.class })
public ResponseEntity<ErrorResponseDTO> accessDeniedExceptionHandler(final **Exception** ex) {
    ......
}

Я использовал @ControllerAdvice, например

@ControllerAdvice
public class GlobalControllerExceptionHandler {
@ExceptionHandler({BadRequestException.class, IllegalArgumentException.class, MaxUploadSizeExceededException.class})
    @ResponseBody
    public ResponseEntity<ErrorResponse> handleBadRequestException(Exception exception, WebRequest request) {
        String message = StringUtils.isEmpty(exception.getMessage()) ? properties.getGeneralMessages().get("fail") : exception.getMessage();
        if (message.contains(";"))
            message = message.substring(0, message.indexOf(";"));
        return getResponseEntity(message, null);
    }
}
...