ResponseEntityExceptionHandler helps you handle errors in your Spring Boot app in one place. It makes your app send clear error messages to users.
ResponseEntityExceptionHandler in Spring Boot
public class MyExceptionHandler extends ResponseEntityExceptionHandler { @Override protected ResponseEntity<Object> handleMethodArgumentNotValid( MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { // custom error response return new ResponseEntity<>("Custom error message", HttpStatus.BAD_REQUEST); } @ExceptionHandler(MyCustomException.class) public ResponseEntity<Object> handleMyCustomException(MyCustomException ex) { return new ResponseEntity<>(ex.getMessage(), HttpStatus.BAD_REQUEST); } }
Extend ResponseEntityExceptionHandler to override default error handling methods.
Use @ExceptionHandler to handle specific exceptions not covered by default methods.
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { @Override protected ResponseEntity<Object> handleHttpMessageNotReadable( HttpMessageNotReadableException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { return new ResponseEntity<>("Malformed JSON request", HttpStatus.BAD_REQUEST); } }
@ExceptionHandler(ResourceNotFoundException.class) public ResponseEntity<Object> handleResourceNotFound(ResourceNotFoundException ex) { return new ResponseEntity<>("Resource not found", HttpStatus.NOT_FOUND); }
This class catches validation errors and illegal argument exceptions. It sends clear messages and HTTP 400 status to the client.
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.context.request.WebRequest; import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; @ControllerAdvice public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { @Override protected ResponseEntity<Object> handleMethodArgumentNotValid( MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { String errorMessage = "Validation failed: " + ex.getBindingResult().getErrorCount() + " error(s)"; return new ResponseEntity<>(errorMessage, HttpStatus.BAD_REQUEST); } @ExceptionHandler(IllegalArgumentException.class) public ResponseEntity<Object> handleIllegalArgument(IllegalArgumentException ex) { return new ResponseEntity<>("Illegal argument: " + ex.getMessage(), HttpStatus.BAD_REQUEST); } }
Use @ControllerAdvice to apply exception handling globally across controllers.
Override methods from ResponseEntityExceptionHandler to customize common Spring exceptions.
Always return meaningful messages and proper HTTP status codes for better client understanding.
ResponseEntityExceptionHandler centralizes error handling in Spring Boot apps.
Override its methods or use @ExceptionHandler for custom error responses.
This improves user experience by sending clear, consistent error messages.