DIGITAL GURU
Java DSA Portfolio

Global Exception Handling (@ControllerAdvice)

Handle runtime exceptions globally across all controllers with standardized RFC-7807 error responses.

Anuj Kumar Singh Written by Anuj Kumar Singh (Lead Engineer, 13+ yrs exp) 5 min read Verified Spring Boot 3+ Guide

Real-World Analogy

Think of @ControllerAdvice as a central emergency dispatch center—whenever an unexpected accident (Exception) occurs anywhere in your application, dispatch takes control and sends back a calm, structured help message.

Centralized Exception Handling

Without global exception handling, unhandled runtime exceptions return ugly 500 internal server error stack traces to clients. @ControllerAdvice captures exceptions application-wide.

Key Advantages:

  • Clean Controller Code: Removes duplicate try-catch blocks from controller methods.
  • Standardized API Errors: Guarantees all API errors return a consistent JSON structure containing timestamp, status code, and message.

Production Code Example:

GlobalExceptionHandler.java
package com.anujsingh.digitalguru.exception;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.time.LocalDateTime;
import java.util.Map;

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(ResourceNotFoundException.class)
    public ResponseEntity<?> handleNotFound(ResourceNotFoundException ex) {
        Map<String, Object> body = Map.of(
            "timestamp", LocalDateTime.now(),
            "status", 404,
            "error", ex.getMessage()
        );
        return new ResponseEntity<>(body, HttpStatus.NOT_FOUND);
    }
}

Key Architectural Concepts & Best Practices:

When working with Global Exception Handling (@ControllerAdvice) in enterprise Spring Boot applications, keep these key architectural guidelines in mind:

  • Separation of Concerns: Maintain a strict boundary between HTTP endpoints, service logic, and database persistence layers.
  • Framework Conventions: Rely on Spring Boot auto-configuration defaults whenever possible, overriding settings only via application.yml or @Configuration classes when customized behavior is required.
  • Production Monitoring & Reliability: Ensure proper exception handling, thread-safety, and resource cleanup to prevent memory leaks and unexpected runtime downtime.
  • Developer Ergonomics: Write clean, self-documenting code with modern Java features (Records, Lambdas, Streams) to simplify code reviews and maintenance.

Summary Takeaway:

Mastering Global Exception Handling (@ControllerAdvice) ensures that your Java & Spring Boot backend microservices remain maintainable, secure, and compliant with modern enterprise software engineering standards.

Security Warning

Never return raw exception stack traces (`ex.printStackTrace()`) in production API error responses! Stack traces leak internal code details to potential attackers.