Недавно я перенес свое приложение с Spring Boot 2.1 на Spring Boot 3.0.
Но проблема в том, что теперь есть конечные точки, которые не предоставляют тот же ответ при возникновении ошибки, вместо этого я получаю что-то вроде этого:
{
"type": "about:blank",
"title": "Bad Request",
"status": 400,
"detail": "Failed to convert 'id' with value: 'territory'",
"instance": "/webfront/administration/book/territory"
}
Я добился этого, добавив класс @ControllerAdvice, который является наследником ResponseEntityExceptionHandler.
Однако мне нужна другая информация, ожидаемая информация будет такой:
{
"type": "about:blank",
"title": "Bad Request",
"status": 400,
"detail": "Failed to convert 'id' with value: 'territory'",
"instance": "/webfront/administration/book/territory",
"timestamp": "2023-04-15 12:02:21",
"code" : 24
}
Вот реализация моего совета по контроллеру, который следует применять глобально (для примера есть только одно исключение, но на самом деле их несколько).
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
private static ErrorResponse mapToErrorResponse(Exception e, ApplicationError applicationError, String errorMessage, HttpStatus status) {
return ErrorResponse.builder(e, status, errorMessage)
.property("code", String.valueOf(applicationError.getCode()))
.property("timestamp", Instant.now())
.build();
}
@ExceptionHandler(FileAccessException.class)
public ErrorResponse fileAccessException(FileAccessException fae) {
log.error("File access Exception", fae);
return mapToErrorResponse(fae, fae.getApplicationError(), fae.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
...
}
По какой-то причине этот обработчик не обнаруживается Spring, и тело исключений продолжает работать как первый пример без моих пользовательских данных.
У меня также есть еще одна проблема, связанная с моим UrlAuthenticationFailureHandler: раньше, когда пользователь пытался получить доступ к несанкционированному маршруту, исключение обрабатывалось, теперь тело всегда пусто. Я попробовал добавить эти записи конфигурации в свой application.yml, но это не имело никакого значения:
server:
error:
include-message: ALWAYS
include-stacktrace: ALWAYS
mvc:
problemdetails:
enabled: true
Подробнее здесь: https://stackoverflow.com/questions/761 ... ing-applie
Глобальный обработчик исключений / @ControllerAdvice при весенней загрузке 3.0 не применяется ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Обработчик исключений Spring @Controller и глобальный обработчик исключений. Как вызвать оба
Anonymous » » в форуме JAVA - 0 Ответы
- 10 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Глобальный обработчик исключений отменяет обработчик транзакций базы данных
Anonymous » » в форуме JAVA - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Глобальный обработчик ошибок для приложений React Native (android, ios)
Anonymous » » в форуме Android - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-