Skip to main content

Handling Exceptions and Returning User-Friendly Messages in Spring Boot

In a Spring Boot application, it's crucial to handle exceptions gracefully and provide user-friendly error messages when something goes wrong. One way to achieve this is by using a controller advice, which allows you to intercept and handle exceptions globally for all controllers. In this blog post, we'll explore how to write a controller advice in Spring Boot that catches all exceptions and returns user-friendly messages.

Setting up the Controller Advice

First, let's create a new class annotated with @ControllerAdvice and implement the ResponseEntityExceptionHandler class. This class will handle exceptions globally for all controllers in our Spring Boot application.

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;

@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {

}

Handling Exceptions

Next, we need to define exception handling methods within the GlobalExceptionHandler class. We'll annotate these methods with @ExceptionHandler and specify the exception types we want to handle.

@ExceptionHandler(Exception.class)
public ResponseEntity<Object> handleException(Exception ex) {
   // Handle general exceptions here
   // Create a custom error response object
   ErrorResponse errorResponse = new ErrorResponse(HttpStatus.INTERNAL_SERVER_ERROR, "An error occurred");
   return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
}

@ExceptionHandler(YourCustomException.class)
public ResponseEntity<Object> handleCustomException(YourCustomException ex) {
   // Handle specific exceptions here
   // Create a custom error response object
   ErrorResponse errorResponse = new ErrorResponse(HttpStatus.BAD_REQUEST, ex.getMessage());
   return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST);
}

With this setup, any uncaught exceptions in your Spring Boot REST controllers will be intercepted by the GlobalExceptionHandler class. The exception handling methods can then create custom error response objects with user-friendly messages and appropriate HTTP status codes to return to the client.

Comments

Popular posts from this blog

a simple example for jdbc PreparedStatement

a simple example for PreparedStatement package basics.in.java.blogspot.in; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Main { private static final String USERNAME="root"; private static final String PASSWORD=""; private static final String CONN_STRING="jdbc:mysql://localhost/basicsinjavablogspot"; public static void main(String[] args) throws ClassNotFoundException, SQLException { Class.forName("com.mysql.jdbc.Driver"); Connection conn=null; Statement stmt=null; ResultSet rs=null; try { conn= DriverManager.getConnection(CONN_STRING, USERNAME, PASSWORD); System.out.println("database connection successful"); //stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); String sql="select * fr...

Server-Side Pagination with React-Table and Spring Boot JPA with H2 Database

Pagination is a common technique used to split large amounts of data into smaller, more manageable chunks. With server-side pagination, data is retrieved from the server in smaller batches, reducing the amount of data transferred over the network and improving application performance. React-Table provides a wide range of built-in features such as sorting, filtering, pagination, row selection, and column resizing. These features can be easily configured and customized to fit specific requirements. For example, you can customize the sorting behavior to handle multiple sorting criteria, or you can add custom filters to the table to handle complex data filtering scenarios. Additionally, React-Table provides a flexible API that allows developers to extend its functionality with custom hooks, plugins, and components. This means that you can easily add custom functionality to the table, such as exporting data to CSV or integrating with external data sources. In terms of styl...