Благодаря DefaultErrorAttributes
Spring Boot по умолчанию возвращает тело ответа для исключений, которое отвечает моим потребностям, из коробки:
{
"timestamp": 1588022957431,
"status": 400,
"error": "Bad Request",
"exception": "org.springframework.web.bind.MethodArgumentNotValidException",
"errors": [
{
"codes": [
"NotEmpty.myResource.label",
"NotEmpty.label",
"NotEmpty.java.lang.String",
"NotEmpty"
],
"arguments": [
{
"codes": [
"myResource.label",
"label"
],
"arguments": null,
"defaultMessage": "label",
"code": "label"
}
],
"defaultMessage": "must not be empty",
"objectName": "myResource",
"field": "label",
"rejectedValue": null,
"bindingFailure": false,
"code": "NotEmpty"
}
],
"message": "Validation failed for object='myResource'. Error count: 1"
}
Кроме того, между встроенным обработка исключений, предоставляемая DefaultHandlerExceptionResolver
, и моя собственная настраиваемая обработка ошибок, у меня есть исключения, возвращающие именно те коды ответов, которые я хочу предоставить для моего REST API.
Что я хотел бы сделать это журнал исключений, выданных для целей отладки. Если исключение приводит к ответу 4xx, я хотел бы зарегистрировать его как уровень отладки, так как это проблема с запросом клиента, а не то, что мне, как правило, требуется для входа в систему (но это может быть полезно при спецификация отладки c выдает или проверяет правильность кода). Если это приводит к исключению 5xx, я хотел бы зарегистрировать его на уровне предупреждения, поскольку это указывает на неожиданную проблему с сервером, о которой я, вероятно, хотел бы сообщить.
Я не вижу хорошего механизм добавления в эту запись при сохранении как тела ответа Spring Boot по умолчанию, так и моих настроенных отображений кода состояния. Как я могу сделать это условное ведение журнала на основе кода состояния при сохранении моего текущего тела ответа и кодов состояния? Более того, есть ли способ сделать это, который также будет работать с несколькими имеющимися у меня конечными точками, которые используют свои собственные настроенные @ExceptionHandler
методы для возврата другого тела ответа?