Aangepaste statuscodes van Spring Controllers retourneren

1. Overzicht

In dit korte artikel worden enkele manieren gedemonstreerd om retourneer aangepaste HTTP-statuscodes van Spring MVC-controllers.

Dit is vaak belangrijk om het resultaat van een verzoek aan een cliënt duidelijker uit te drukken en de volledige rijke semantiek van het HTTP-protocol te gebruiken. Als er bijvoorbeeld iets misgaat met een verzoek, kan het verzenden van een specifieke foutcode voor elk type mogelijk probleem de klant in staat stellen om een ​​passend foutbericht aan de gebruiker te tonen.

Het opzetten van een basis Spring MVC-project valt buiten het bestek van dit artikel, maar je kunt hier meer informatie vinden.

2. Aangepaste statuscodes retourneren

Spring biedt een aantal primaire manieren om aangepaste statuscodes van zijn Controller klassen:

  • gebruik maken van een ResponseEntity
  • de ... gebruiken @ResponseStatus annotatie over uitzonderingsklassen, en
  • de ... gebruiken @ControllerAdvice en @BuienRadarNL annotaties.

Deze opties sluiten elkaar niet uit; verre van dat, ze kunnen elkaar eigenlijk aanvullen.

Dit artikel behandelt de eerste twee manieren (ResponseEntity en @ResponseStatus). Als u meer wilt weten over het gebruik van @ControllerAdvice en @BuienRadarNL, je kunt er hier meer over lezen.

2.1. Statuscodes retourneren via een ResponseEntity

In een standaard Spring MVC-controller zullen we een eenvoudige mapping definiëren:

@RequestMapping (value = "/ controller", method = RequestMethod.GET) @ResponseBody openbare ResponseEntity sendViaResponseEntity () {retourneer nieuwe ResponseEntity (HttpStatus.NOT_ACCEPTABLE); }

Na ontvangst van een GET-verzoek om “/ controller“, Zal Spring een reactie terugsturen met de 406-code (niet acceptabel). We hebben willekeurig de specifieke responscode voor dit voorbeeld geselecteerd. U kunt elke HTTP-statuscode retourneren (de volledige lijst vindt u hier).

2.2. Statuscodes retourneren via een uitzondering

We zullen een tweede methode aan de controller toevoegen om te demonstreren hoe u een Uitzondering om een ​​statuscode te retourneren:

@RequestMapping (value = "/ exception", method = RequestMethod.GET) @ResponseBody openbare ResponseEntity sendViaException () {gooi nieuwe ForbiddenException (); }

Na ontvangst van een GET-verzoek om “/uitzondering“, Spring gooit een ForbiddenException. Dit is een aangepaste uitzondering die we in een aparte klasse zullen definiëren:

@ResponseStatus (HttpStatus.FORBIDDEN) openbare klasse ForbiddenException breidt RuntimeException uit {}

In deze uitzondering is geen code vereist. Al het werk wordt gedaan door de @ResponseStatus annotatie.

In dit geval, wanneer de uitzondering wordt gegenereerd, retourneert de controller die deze heeft gegenereerd een antwoord met de antwoordcode 403 (verboden). Indien nodig kunt u ook een bericht in de annotatie toevoegen dat samen met het antwoord wordt teruggestuurd.

In dit geval ziet de klas er als volgt uit:

@ResponseStatus (waarde = HttpStatus.FORBIDDEN, reason = "Om een ​​voorbeeld van een aangepast bericht te tonen") openbare klasse ForbiddenException breidt RuntimeException uit {}

Het is belangrijk op te merken dat hoewel het technisch mogelijk is om een ​​uitzondering elke statuscode te laten retourneren, het in de meeste gevallen alleen logisch is om uitzonderingen te gebruiken voor foutcodes (4XX en 5XX).

3. Conclusie

De tutorial liet zien hoe je aangepaste statuscodes van Spring MVC-controllers kunt retourneren.

De implementatie is te vinden in het voorbeeld GitHub-project.