В приложении Spring Boot, как бы я перехватывал внутренне выданные исключения, которые в противном случае могли бы попасть на клиент, но не исключения Spring MVC? - PullRequest
0 голосов
/ 20 декабря 2018

В моем приложении Spring Boot есть класс, который автоматически обрабатывает многие конкретные исключения, используя @ControllerAdvice:

@ControllerAdvice
@RequestMapping(produces = APPLICATION_JSON_UTF8_VALUE)
public class RestResponseEntityExceptionHandler {

Например, я ловлю это:

@ExceptionHandler(OptimisticLockingFailureException.class)
public ResponseEntity<ErrorDTO> optimisticLockingFailureException(final OptimisticLockingFailureException e) {
    LOGGER.info("Encountered OptimisticLockingFailureException", e);
    ErrorDTO errorDTO = new ErrorDTO("CONFLICT_ERROR", "Object was locked by ano user, please refresh and try again.");
    return new ResponseEntity<>(errorDTO, HttpStatus.CONFLICT);
}

И даже низкийИсключения из базы данных уровня:

@ExceptionHandler(DataIntegrityViolationException.class)
public ResponseEntity<ErrorDTO> dataIntegrityViolationException(final DataIntegrityViolationException e) {

Но иногда все же некоторые исключения уходят к клиенту, с которым я не обращался конкретно и о котором не знал.Я не могу предсказать имена всех исключений в усложняющемся приложении.

Поэтому я наивно добавил это:

@ExceptionHandler(Exception.class)
protected ResponseEntity<ErrorDTO> exception(final Exception e) {
    ErrorDTO error = new ErrorDTO(
            "Test", "test");
    return new ResponseEntity<>(error, HttpStatus.BAD_REQUEST);
}

Но это ловит все, даже исключения Spring MVC.Так что теперь, если я делаю запрос к какой-либо несуществующей конечной точке и обычно Spring MVC прекрасно справляется с этим, теперь он также попадает в мой метод, и я не хочу этого.

Как бы я сделал так, чтобы всездесь выявляются исключения, генерируемые после того, как точка входа в мои контроллеры пересекается, так что клиент никогда не видит трассировку стека, но все, что обрабатывает Spring MVC до того, как мой код даже введен, обрабатывается нормально?

1 Ответ

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

Вы можете попробовать расширить ResponseEntityExceptionHandler на ControllerAdvice и переопределить handleExceptionInternal, если вам нужно иметь общее сообщение об ошибке.Я считаю, что есть некоторые вещи, которые вы должны добавить в свойства своего приложения.

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