哪个模型类可以用于请求映射方法的错误响应?

问题描述:

我正在为我的@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

+0

这是有帮助的,谢谢。 –

+0

+1为外部链接。然而,这两个答案对我来说同样有帮助,我只能接受一个答案。所以我接受了第一个回答的问题。 :) –