В моем приложении 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 до того, как мой код даже введен, обрабатывается нормально?