Spring boot - обработчик пользовательских исключений - PullRequest
0 голосов
/ 06 декабря 2018

Я разрабатываю приложение отдыха с загрузкой Spring.Это приложение имеет собственный фильтр, который разрешает доступ только по некоторым запросам.Если пользователю требуется определенный ресурс, фильтр выдает исключение.Как я могу обработать все исключения, сгенерированные в этом фильтре на глобальном уровне?

Я пробовал аннотацию @ControllerAdvice, но не работает.

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

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

ResponseEntityExceptionHandler

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

@ControllerAdvice
@RestController
public class CustomizedResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(Exception.class)
    public final ResponseEntity<Object> handleAllExceptions(Exception ex, WebRequest request) {
        ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(), ex.getMessage(), request.getDescription(false));
        return new ResponseEntity<>(exceptionResponse, HttpStatus.INTERNAL_SERVER_ERROR);
    }

    @ExceptionHandler(UserNotFoundException.class)
    public final ResponseEntity<Object> handleUserNotFoundException(Exception ex, WebRequest request) {
        ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(), ex.getMessage(), request.getDescription(false));
        return new ResponseEntity<>(exceptionResponse, HttpStatus.NOT_FOUND);
    }

    @Override
    protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,               HttpHeaders headers, HttpStatus status, WebRequest request) {
        ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(), "Validation Failed", ex.getBindingResult().toString());
        return new ResponseEntity<>(exceptionResponse, HttpStatus.BAD_REQUEST);
    }
}

Вызатем вы можете добавить ваши настроенные исключения и дополнить объект ответа, если вам это нужно.

Пожалуйста, найдите полный код с другими классами по здесь

0 голосов
/ 06 декабря 2018

сначала вы должны создать собственное исключение и расширить его от runtimeException

public class CustomException extends RuntimeException
{
    ...
}

, а затем вы можете перехватить его следующим образом

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(CustomException.class)
    public ResponseEntity handleCustomException(CustomException ex) {
          return ResponseHelper.response(ex.getData(), ex.getMsg(), 
         ex.getStatus());
        }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...