Spring Boot – ResponseStatusException
reason not returned in response body

At some point I have decided that I really have to return HTTP codes for some illegal invocations of my API. I have decided to use simple solution.

@GetMapping("/responsestatusexception")
public String getResourceThatThrowsResponseStatusException() {
  throw new ResponseStatusException(
    HttpStatus.NOT_FOUND,
    "Not found thrown by getResourceThatThrowsResponseStatusException");
}

however, this solution has one, small drawback. You have to remember about putting

server.error.include-message=always

inside application.properties. Otherwise, reason will not be passed back. You can read some thoughts about that here.

Anyways, before I have learned that I can use this approach, I have already built something different. Solution based on @ControllerAdvice. Here, I have a custom exception handler that extracts info from the exception and passes it back to client as JSON message.

@ControllerAdvice
public class GlobalExceptionHandler {
  @ExceptionHandler(NotFoundException.class)
  public ResponseEntity<ErrorDTO> generateNotFoundException(NotFoundException ex) {
    ErrorDTO errorDTO = new ErrorDTO();
    errorDTO.setMessage(ex.getMessage());
    errorDTO.setStatus(String.valueOf(ex.getStatus().value()));
    errorDTO.setTime(new Date().toString());

    return new ResponseEntity<ErrorDTO>(errorDTO, ex.getStatus());
  }

}

You can find full solution here: