This post is a follow up on the excellent article by Bruno Leite Guide to Spring Boot REST API Error Handling, about the error handling implementation strategy in Spring MVC.
Here we’ll apply some minor improvements over Bruno’s implementation of the class
The class is the focal point of the package, as its singleton instance will be called by Spring whenever a registered exception is raised during the flow of a web request. Exceptions are handled in 2 slightly different modes:
- Overriding a method: The class extends
ResponseEntityExceptionHandler, which is an abstract base for
@ControllerAdviceannotated classes; a number of exceptions are already handled by the parent class, therefore it’s needed to override an existing method in order to change this default behavior;
- Decorating a method with
@ExceptionHandlerannotation: Exceptions not managed in the parent class are handled by adding new methods decorated with the mentioned annotation;
Simplification of @ExceptionHandler annotated methods
The first improvement is the substitution of the class annotation
@ControllerAdvice with the more specific
@RestControllerAdvice, which is simply a composition of
@ResponseBody class annotations.
The result is that
@ResponseBody is applied by default to all class’s methods, and this permits a little simplification of the methods annotated with
These methods now return directly the
ApiError object instead of using
ResponseEntity<Object> and define the HTTP response status with the use of
Removal of the HTTP status from ApiError
The second improvement is the removal of the HTTP status from the
This improves the decoupling between the class and the HTTP stack, making it more suitable for reuse in cases where the communication is not based on HTTP.
Find below a small excerpt of the changes applied:
The code is available in the forked github repository.