Search code examples
javaspring-bootresterror-handling

Spring ResponseStatusException does not return reason


I have a very simple @RestController, and I'm trying to set a custom error message. But for some reason, the message for the error is not showing up.

This is my controller:

@RestController
@RequestMapping("openPharmacy")
public class OpenPharmacyController {


    @PostMapping
    public String findNumberOfSurgeries(@RequestBody String skuLockRequest) {
        throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "This postcode is not valid");
    }

}

This is the response that I get:

{
    "timestamp": "2020-06-24T17:44:20.194+00:00",
    "status": 400,
    "error": "Bad Request",
    "message": "",
    "path": "/openPharmacy/"
}

I'm passing a JSON, but I'm not validating anything, I'm just trying to set the custom message. If I change the status code, I see that on the response, but the message is always empty.

Why is this not working like expected? This is such a simple example that I can't see what may be missing. When I debug the code I can see that the error message has all the fields set. But for some reason, the message is never set on the response.


Solution

  • This answer was provided by the user @Hassan in the comments on the original question. I'm only posting it as an answer to give it better visibility.


    Solution

    Basically, all you need to do is add server.error.include-message=always to your application.properties file, and now your message field should be populated.

    This behavior was changed in Spring Boot 2.3 which you can read about here:

    Spring Boot 2.3 Release Notes: Changes to the Default Error Page’s Content