Afhandeling van Uitzonderingen
Exception handling in een REST API met Spring Boot is een essentieel aspect van de ontwikkeling dat effectieve beheersing van fouten mogelijk maakt en clients informeert over problemen die zich op de server hebben voorgedaan. Laten we dit proces in meer detail bekijken.
Hoe helpt het om de client te informeren over fouten?
Foutafhandeling in een REST API helpt bij het standaardiseren van het formaat van foutmeldingen, waardoor het voor clients eenvoudiger wordt om met de antwoorden te werken. Dit informeert hen over de oorzaken van fouten, zodat clients kunnen begrijpen wat er mis is gegaan en hoe ze het probleem kunnen oplossen.
Bovendien maakt deze afhandeling onderscheid tussen typen fouten, zoals validatiefouten of toegangsproblemen, waardoor de foutmeldingen nauwkeuriger en nuttiger worden.
Implementatie van exception handling met annotaties
Spring Boot biedt verschillende hulpmiddelen voor exception handling. De belangrijkste zijn de annotaties @ControllerAdvice en @ExceptionHandler.
De annotatie @ControllerAdvice maakt het mogelijk om globale exception handlers te definiëren voor alle controllers in de applicatie, wat helpt om foutafhandeling te centraliseren en code duplicatie te voorkomen.
Binnen een klasse die is geannoteerd met @ControllerAdvice, geven methoden geannoteerd met @ExceptionHandler aan welke typen exceptions een bepaalde methode moet afhandelen. Dit vereenvoudigt het beheer van fouten en maakt de code overzichtelijker en meer georganiseerd.
GlobalExceptionHandler.java
12345678@ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(ApiException.class) public ResponseEntity<?> handleException(ApiException ex) { // error handling } }
Binnen deze klasse zal de methode handleException() worden aangeroepen wanneer er een uitzondering van het type ApiException optreedt in de applicatie. De annotatie @ExceptionHandler(ApiException.class) geeft aan dat deze methode exceptions van dit specifieke type afhandelt.
Een aangepaste uitzondering maken
Maar wat is precies de ApiException? Dit is een aangepaste uitzondering die specifiek is gemaakt voor onze API, en we kunnen onze eigen uitzonderingen maken en deze gebruiken in onze REST API.
Meer informatie over het maken van aangepaste uitzonderingen is hier te vinden.
ApiException.java
12345678910111213141516public class ApiException extends RuntimeException { // HTTP status code associated with this exception private final HttpStatus httpStatus; // Constructor to initialize the exception with a message and an HTTP status public ApiException(String message, HttpStatus httpStatus) { super(message); this.httpStatus = httpStatus; } // Getter method to retrieve the HTTP status public HttpStatus getHttpStatus() { return httpStatus; } }
Deze code definieert de ApiException klasse, die erft van RuntimeException en een extra veld httpStatus bevat voor het opslaan van de HTTP-status. De klasseconstructor accepteert een bericht en een HTTP-status, die vervolgens worden doorgegeven aan de basissconstructor en opgeslagen in het httpStatus veld.
Hierna kan een uitzondering vanuit de applicatie worden opgegooid:
Main.java
1234567891011public BookResponseDTO updateBook(String id, BookRequestDTO book) { Book modelBook = MapperBook.dtoRequestToModel(book); Book repositoryBook = bookRepository.updateBook(id, modelBook); // If the book was not found in the repository, throw an ApiException with a NOT_FOUND status if (repositoryBook == null) { throw new ApiException("Not found book by id: " + id, HttpStatus.NOT_FOUND); } return MapperBook.modelToResponseDto(repositoryBook); }
Dit type uitzondering wordt opgevangen door een methode handleException(ApiException ex) die is ontworpen om deze te afhandelen, en binnen die methode kan de logica voor het beheren van de uitzondering worden gedefinieerd.
De logica die geïmplementeerd moet worden, is het opvangen van uitzonderingen gerelateerd aan de API en het teruggeven van een gestructureerde respons met foutinformatie en de juiste HTTP-status.
Main.java
123456789@ExceptionHandler(ApiException.class) public ResponseEntity<?> handleException(ApiException ex) { return new ResponseEntity<>(ErrorResponse .builder() .error(ex.getMessage()) .build(), ex.getHttpStatus() ); }
Deze code verwerkt de ApiException door een ResponseEntity te maken met foutinformatie. De methode handleException() bouwt een ErrorResponse object met het bericht uit de exception en stelt de HTTP-status in op basis van het httpStatus veld van de exception, waarna dit wordt teruggegeven aan de client.
We hebben het httpStatus veld geïnitialiseerd wanneer we de exception in onze applicatie gooien.
ErrorResponse is een klasse die wordt gebruikt om informatie over de fout te verschaffen. Het bevat een error veld dat de foutbeschrijving weergeeft en wordt aangemaakt met behulp van de annotaties @Data en @Builder.
ErrorResponse.java
12345@Data @Builder public class ErrorResponse { private String error; }
De annotatie @Builder van Lombok vereenvoudigt het aanmaken van objecten door het Builder-patroon te implementeren. Dit zorgt voor een leesbaardere en beter onderhoudbare manier om objecten te construeren, vooral bij objecten met veel parameters. Bijvoorbeeld, je kunt een ErrorResponse-instantie als volgt aanmaken:
ErrorResponse.builder().error("ERROR").build();
De builder() methode initialiseert een nieuwe builder voor de ErrorResponse klasse. De error("ERROR") methode stelt het error veld in op "ERROR", en de build() methode construeert het definitieve ErrorResponse object met de gespecificeerde waarde.
Foutafhandeling in onze applicatie
Samenvatting
Exception handling in een REST API centraliseert foutafhandeling door een consistent responsformaat voor de client te bieden. Dit vereenvoudigt het begrijpen en afhandelen van fouten, omdat clients duidelijke en gestructureerde meldingen ontvangen.
Het gebruik van de annotaties @ControllerAdvice en @ExceptionHandler maakt het mogelijk om de afhandeling van verschillende uitzonderingen te customizen, terwijl aangepaste uitzonderingen extra informatie kunnen bevatten, zoals de HTTP-status.
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Awesome!
Completion rate improved to 3.45
Afhandeling van Uitzonderingen
Veeg om het menu te tonen
Exception handling in een REST API met Spring Boot is een essentieel aspect van de ontwikkeling dat effectieve beheersing van fouten mogelijk maakt en clients informeert over problemen die zich op de server hebben voorgedaan. Laten we dit proces in meer detail bekijken.
Hoe helpt het om de client te informeren over fouten?
Foutafhandeling in een REST API helpt bij het standaardiseren van het formaat van foutmeldingen, waardoor het voor clients eenvoudiger wordt om met de antwoorden te werken. Dit informeert hen over de oorzaken van fouten, zodat clients kunnen begrijpen wat er mis is gegaan en hoe ze het probleem kunnen oplossen.
Bovendien maakt deze afhandeling onderscheid tussen typen fouten, zoals validatiefouten of toegangsproblemen, waardoor de foutmeldingen nauwkeuriger en nuttiger worden.
Implementatie van exception handling met annotaties
Spring Boot biedt verschillende hulpmiddelen voor exception handling. De belangrijkste zijn de annotaties @ControllerAdvice en @ExceptionHandler.
De annotatie @ControllerAdvice maakt het mogelijk om globale exception handlers te definiëren voor alle controllers in de applicatie, wat helpt om foutafhandeling te centraliseren en code duplicatie te voorkomen.
Binnen een klasse die is geannoteerd met @ControllerAdvice, geven methoden geannoteerd met @ExceptionHandler aan welke typen exceptions een bepaalde methode moet afhandelen. Dit vereenvoudigt het beheer van fouten en maakt de code overzichtelijker en meer georganiseerd.
GlobalExceptionHandler.java
12345678@ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(ApiException.class) public ResponseEntity<?> handleException(ApiException ex) { // error handling } }
Binnen deze klasse zal de methode handleException() worden aangeroepen wanneer er een uitzondering van het type ApiException optreedt in de applicatie. De annotatie @ExceptionHandler(ApiException.class) geeft aan dat deze methode exceptions van dit specifieke type afhandelt.
Een aangepaste uitzondering maken
Maar wat is precies de ApiException? Dit is een aangepaste uitzondering die specifiek is gemaakt voor onze API, en we kunnen onze eigen uitzonderingen maken en deze gebruiken in onze REST API.
Meer informatie over het maken van aangepaste uitzonderingen is hier te vinden.
ApiException.java
12345678910111213141516public class ApiException extends RuntimeException { // HTTP status code associated with this exception private final HttpStatus httpStatus; // Constructor to initialize the exception with a message and an HTTP status public ApiException(String message, HttpStatus httpStatus) { super(message); this.httpStatus = httpStatus; } // Getter method to retrieve the HTTP status public HttpStatus getHttpStatus() { return httpStatus; } }
Deze code definieert de ApiException klasse, die erft van RuntimeException en een extra veld httpStatus bevat voor het opslaan van de HTTP-status. De klasseconstructor accepteert een bericht en een HTTP-status, die vervolgens worden doorgegeven aan de basissconstructor en opgeslagen in het httpStatus veld.
Hierna kan een uitzondering vanuit de applicatie worden opgegooid:
Main.java
1234567891011public BookResponseDTO updateBook(String id, BookRequestDTO book) { Book modelBook = MapperBook.dtoRequestToModel(book); Book repositoryBook = bookRepository.updateBook(id, modelBook); // If the book was not found in the repository, throw an ApiException with a NOT_FOUND status if (repositoryBook == null) { throw new ApiException("Not found book by id: " + id, HttpStatus.NOT_FOUND); } return MapperBook.modelToResponseDto(repositoryBook); }
Dit type uitzondering wordt opgevangen door een methode handleException(ApiException ex) die is ontworpen om deze te afhandelen, en binnen die methode kan de logica voor het beheren van de uitzondering worden gedefinieerd.
De logica die geïmplementeerd moet worden, is het opvangen van uitzonderingen gerelateerd aan de API en het teruggeven van een gestructureerde respons met foutinformatie en de juiste HTTP-status.
Main.java
123456789@ExceptionHandler(ApiException.class) public ResponseEntity<?> handleException(ApiException ex) { return new ResponseEntity<>(ErrorResponse .builder() .error(ex.getMessage()) .build(), ex.getHttpStatus() ); }
Deze code verwerkt de ApiException door een ResponseEntity te maken met foutinformatie. De methode handleException() bouwt een ErrorResponse object met het bericht uit de exception en stelt de HTTP-status in op basis van het httpStatus veld van de exception, waarna dit wordt teruggegeven aan de client.
We hebben het httpStatus veld geïnitialiseerd wanneer we de exception in onze applicatie gooien.
ErrorResponse is een klasse die wordt gebruikt om informatie over de fout te verschaffen. Het bevat een error veld dat de foutbeschrijving weergeeft en wordt aangemaakt met behulp van de annotaties @Data en @Builder.
ErrorResponse.java
12345@Data @Builder public class ErrorResponse { private String error; }
De annotatie @Builder van Lombok vereenvoudigt het aanmaken van objecten door het Builder-patroon te implementeren. Dit zorgt voor een leesbaardere en beter onderhoudbare manier om objecten te construeren, vooral bij objecten met veel parameters. Bijvoorbeeld, je kunt een ErrorResponse-instantie als volgt aanmaken:
ErrorResponse.builder().error("ERROR").build();
De builder() methode initialiseert een nieuwe builder voor de ErrorResponse klasse. De error("ERROR") methode stelt het error veld in op "ERROR", en de build() methode construeert het definitieve ErrorResponse object met de gespecificeerde waarde.
Foutafhandeling in onze applicatie
Samenvatting
Exception handling in een REST API centraliseert foutafhandeling door een consistent responsformaat voor de client te bieden. Dit vereenvoudigt het begrijpen en afhandelen van fouten, omdat clients duidelijke en gestructureerde meldingen ontvangen.
Het gebruik van de annotaties @ControllerAdvice en @ExceptionHandler maakt het mogelijk om de afhandeling van verschillende uitzonderingen te customizen, terwijl aangepaste uitzonderingen extra informatie kunnen bevatten, zoals de HTTP-status.
Bedankt voor je feedback!