Недавно я перенес свое приложение с 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
Программисты JAVA общаются здесь
1726475635
Anonymous
Недавно я перенес свое приложение с Spring Boot [b]2.1[/b] на Spring Boot [b]3.0[/b].
Но проблема в том, что теперь есть конечные точки, которые не предоставляют тот же ответ при возникновении ошибки, вместо этого я получаю что-то вроде этого:
{
"type": "about:blank",
"title": "Bad Request",
"status": 400,
"detail": "Failed to convert 'id' with value: 'territory'",
"instance": "/webfront/administration/book/territory"
}
Я добился этого, добавив класс [b]@ControllerAdvice[/b], который является наследником 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, и тело исключений продолжает работать как первый пример без моих пользовательских данных.
У меня также есть еще одна проблема, связанная с моим [b]UrlAuthenticationFailureHandler[/b]: раньше, когда пользователь пытался получить доступ к несанкционированному маршруту, исключение обрабатывалось, теперь тело всегда пусто. Я попробовал добавить эти записи конфигурации в свой [b]application.yml[/b], но это не имело никакого значения:
server:
error:
include-message: ALWAYS
include-stacktrace: ALWAYS
mvc:
problemdetails:
enabled: true
Подробнее здесь: [url]https://stackoverflow.com/questions/76122428/global-exception-handler-controlleradvice-on-spring-boot-3-0-not-being-applie[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия