Spring Book
  • ❓About this book
  • Tutorials
    • JWT Authentication and Role-Based Authorization with Java Spring Boot
  • 🍲Recipes
    • Handling Exceptions in RESTful User Responses
    • Global REST Error Responses via @ControllerAdvice
    • Proper vs. Improper Way to Implement CRUD in RESTful Services
    • Referencing Values from Properties File in Components
    • Disabling OAuth2 Security for Integration Tests with @TestConfiguration
    • Custom Acutator Endpoints
    • Simplifying Spring Services with Lombok
    • Logging Entities in Spring with Lombok
    • WebScrapping on a Schedule
  • ☕Partner with Katyella for Your Development Needs
Powered by GitBook

Need US based Java Developers

  • Visit Katyella

Katyella LLC http://katyella.com

On this page
Export as PDF
  1. Recipes

Handling Exceptions in RESTful User Responses

@RestController
@RequestMapping("/api/books")
public class BookController {

    @Autowired
    private BookService bookService;

    // Method to retrieve a book by its ID
    @GetMapping("/{id}")
    public ResponseEntity<Book> getBookById(@PathVariable Long id) {
        Book book = bookService.findBookById(id)
                .orElseThrow(() -> new BookNotFoundException("Book with ID: " + id + " not found."));
        return new ResponseEntity<>(book, HttpStatus.OK);
    }

    // Exception handler for BookNotFoundException
    @ExceptionHandler(BookNotFoundException.class)
    @ResponseStatus(HttpStatus.NOT_FOUND)
    public ResponseEntity<String> handleBookNotFoundException(BookNotFoundException ex) {
        // Log the exception details for debugging
        Logger.log(ex.getMessage());

        // Return a user-friendly message and the appropriate HTTP status
        return ResponseEntity
                .status(HttpStatus.NOT_FOUND)
                .body("Book not found. Please check the provided book ID.");
    }

    // ... other methods or exception handlers ...
}

Explanation:

In the code snippet above, the BookController class includes:

  1. Method getBookById:

    • It uses the bookService to attempt to find the book. If the book is not found, bookService.findBookById(id) will return an empty Optional, and the orElseThrow method will throw a BookNotFoundException.

    • The exception message includes the ID of the book that was not found, providing clarity in the logs and to the API users.

  2. Exception Handler handleBookNotFoundException:

    • This method remains the same as before. It handles the BookNotFoundException by logging the exception details and returning a user-friendly message along with a 404 Not Found status.

By including the getBookById method, we demonstrate a typical scenario in a RESTful service where a requested resource (in this case, a book) might not exist, leading to an exception that is gracefully handled by the handleBookNotFoundException method.


This structure ensures that your REST API for book management not only handles requests but also deals with exceptions in a user-friendly manner, improving the reliability and usability of your service.

PreviousJWT Authentication and Role-Based Authorization with Java Spring BootNextGlobal REST Error Responses via @ControllerAdvice

Last updated 1 year ago

🍲