I have a GlobalExceptionHandler
that catches exceptions and returns a HTTP Error codes.
@ControllerAdvice
@Component
public class GlobalExceptionHandler {
private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
...
// 404 - Not Found
@ExceptionHandler(NoHandlerFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public void requestHandlingNoHandlerFound(HttpServletRequest request, Exception exception) {
logger.error("Error Not Found (404): " + exception.getMessage());
}
...
}
This works correctly and responds with a 404
. But the HTTP response looks like this:
HTTP/1.1 404
X-Application-Context: application:8080
Content-Length: 0
Date: Wed, 03 Aug 2016 14:36:52 GMT
But should return:
HTTP/1.1 404 Not Found
X-Application-Context: application:8080
Content-Length: 0
Date: Wed, 03 Aug 2016 14:36:52 GMT
The Not Found
part is missing. This is the same for other errors. e.g. 500 - Internal Server Error
Any ideas in how to include this?
Update: Downgrading from Spring Boot 1.4.0 to 1.3.7 fixed this
by extending this class you can override default spring behavior.
@ResponseStatus(HttpStatus.NOT_FOUND)
is ok, but to get more control over response useResponseEntity
. Also by extendingResponseEntityExceptionHandler
you get access to bunch of preconfigured exception handlers.From the release notes:
This seems like it might be the cause of your issue.