Uploaded image for project: 'Spring Framework'
  1. Spring Framework
  2. SPR-9283

Improved support for REST API error reporting

    Details

    • Type: Improvement
    • Status: Resolved
    • Priority: Minor
    • Resolution: Complete
    • Affects Version/s: 3.1.1
    • Fix Version/s: 3.2 M2
    • Component/s: Web
    • Labels:
      None
    • Last commented by a User:
      true

      Description

      When implementing a REST API, Spring MVC provides full control over what ResponseEntity is returned to a client, which includes full support for setting custom HTTP status codes, response headers, and the response body. This is great and very flexible; however, the error reporting support in Spring MVC for common cases could be made more convenient.

      Specifically, there is no way to auto-map an application business exception to a error response that contains all of the following bits of information: 1. an appropriate HTTP status code, and 2. a custom ErrorBody consisting of an application-specific error message and code. Yes, I know you can annotate an Exception with @ResponseStatus to specify which HTTP status code should be returned when that Exception is thrown. However, there is no ability to specify error data that should be returned in the body (message, code, etc) along with that. You can set a "reason" String, but unfortunately that is just passed off to HttpServletResponse#sendError(int, String) which isn't easily customized & by default generates a HTML response (not what you want with machine-to-machine communication--you typically want a JSON error body).

      Facebook is an example of a REST API that returns a error body along with appropriate HTTP status codes in their API error responses e.g.:

      https://graph.facebook.com/me
      {
         "error": {
            "message": "An active access token must be used to query information about the current user.",
            "type": "OAuthException",
            "code": 2500
         }
      }
      
      {
        "error": {
          "message": "(#803) Some of the aliases you requested do not exist: whatever", 
          "type": "OAuthException", 
          "code": 803
        }
      }
      

      It would be useful if Spring MVC had a documented way of throwing a business exception that automatically resulted in a error response with an appropriate HTTP status code plus a application/json response body containing a application-specific error message and error code.

      Related, if a @Valid object validation failure could also be auto-mapped to an appropriate error structure (e.g. a 400 error status plus a body containing the field(s) in error along with messages and codes for each field error), that would be quite useful as well.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                rstoya05-aop Rossen Stoyanchev
                Reporter:
                kdonald Keith Donald
                Last updater:
                Pavel Orehov
              • Votes:
                1 Vote for this issue
                Watchers:
                5 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved:
                  Days since last comment:
                  5 years, 22 weeks, 1 day ago