【发布时间】:2020-08-12 12:39:50
【问题描述】:
感谢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 响应,我想将其记录为调试级别,因为这是客户端请求的问题,而不是我通常需要在生产中登录的东西(但在调试特定问题或测试代码的正确性)。如果它导致 5xx 异常,我想将它记录在警告级别,因为这表明服务器出现了意外问题,我可能希望了解它。
在保留默认 Spring Boot 响应正文以及我的自定义状态代码映射的同时,我没有看到添加此日志记录的良好机制。如何在保留当前响应正文和状态代码的同时根据状态代码执行此条件日志记录?更好的是,有没有一种方法也适用于我拥有的少数端点,这些端点使用自己定制的@ExceptionHandler 方法返回不同的响应正文?
【问题讨论】:
标签: java spring spring-boot spring-mvc exception