哪个模型类可以用于请求映射方法的错误响应?
我正在为我的@RequestMapping
方法的自定义错误场景设计一个POJO。哪个模型类可以用于请求映射方法的错误响应?
春默认会抛出一个HttpMessageNotReadableException
如果POST
没有任何的身体是由和非常漂亮返回错误响应,这样的事情:
{
"timestamp": "2017-07-28T18:54:11.867+0000",
"status": 400,
"error": "Bad Request",
"exception": "org.springframework.http.converter.HttpMessageNotReadableException",
"message": "Required request body is missing: public org.springframework.http.ResponseEntity<some.package.name.SomeResponseClass> some.package.name.SomeControllerClass.someRequestMappingMethod(java.util.Map<java.lang.String, java.lang.String>, some.package.name.SomeRequestClass)",
"path": "/somepath/"
}
同样,如果与@Valid
失败注释任何字段验证,它抛出MethodArgumentNotValidException
,并返回错误响应为:
{
"timestamp": "2017-07-28T17:23:53.102+0000",
"status": 400,
"error": "Bad Request",
"exception": "org.springframework.web.bind.MethodArgumentNotValidException",
"errors": [
{
"codes": [
"NotNull.incident.someField",
"NotNull.someField",
"NotNull.java.lang.String",
"NotNull"
],
"arguments": [
{
"codes": [
"someObject.someField",
"someField"
],
"arguments": null,
"defaultMessage": "someField",
"code": "someField"
}
],
"defaultMessage": "someField is null",
"objectName": "someObject",
"field": "someField",
"rejectedValue": null,
"bindingFailure": false,
"code": "NotNull"
}
],
"message": "Validation failed for object='someObject'. Error count: 2",
"path": "/somepath/"
}
我一个具有理解,在任一上述情况下的弹簧必须返回一个ResponseEntity
包含标题和正文的对象。 而且必须有一个模型类代表具有上述字段的身体,例如timestamp
,status
,error
等。我只是希望访问该类,以了解Spring在错误响应模型中包含的所有字段。或者,我可能想要扩展它。我花了相当多的时间,现在正在寻找那个班,但找不到。
我能找到的最好的是ResponseEntityExceptionHandler#handleException()
,但我的调试器甚至不会在设置的断点处进行!
任何人都可以指向它存在的包吗?
春引导1.5.2.RELEASE /春4.3.7
这是一个LinkedHashMap<String, Object>
。
通过搜索ErrorController找到它 - 还有一类org.springframework.boot.autoconfigure.web.BasicErrorController
它的方法error
被调用时出现错误occurres,它看起来像这样:
@RequestMapping
@ResponseBody
public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
Map<String, Object> body = getErrorAttributes(request,
isIncludeStackTrace(request, MediaType.ALL));
HttpStatus status = getStatus(request);
return new ResponseEntity<Map<String, Object>>(body, status);
}
您可以在mehod getErrorAttributes
挖了解Map如何构建。
继类将要给大家介绍的反应是如何在错误的情况下产生的 org.springframework.boot.autoconfigure.web.DefaultErrorAttributes
参考思路:
Modify default JSON error response from Spring Boot Rest Controller
http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-error-handling
另外,如果您想要在发生错误时自定义响应,您还可以使用以下方法: @ControllerAdvice随着@ExceptionHandler
另一类是指用于错误处理 org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler
这是有帮助的,谢谢。 –
+1为外部链接。然而,这两个答案对我来说同样有帮助,我只能接受一个答案。所以我接受了第一个回答的问题。 :) –