Returnering af brugerdefinerede statuskoder fra Spring Controllers

1. Oversigt

Denne hurtige artikel vil demonstrere et par måder at returnere tilpassede HTTP-statuskoder fra Spring MVC-controllere.

Dette er ofte vigtigt for mere tydeligt at udtrykke resultatet af en anmodning til en klient og bruge den fulde rige semantik i HTTP-protokollen. For eksempel, hvis noget går galt med en anmodning, vil det at sende en specifik fejlkode til hver type mulig problem give klienten mulighed for at vise en passende fejlmeddelelse til brugeren.

Opsætningen af ​​et grundlæggende Spring MVC-projekt er uden for denne artikels anvendelsesområde, men du kan finde mere information her.

2. Returnering af brugerdefinerede statuskoder

Spring giver et par primære måder at returnere brugerdefinerede statuskoder fra dens Controller klasser:

  • ved hjælp af en SvarEnhed
  • bruger @ResponseStatus anmærkning om undtagelsesklasser, og
  • bruger @ControllerAdvice og @ExceptionHandler kommentarer.

Disse muligheder udelukker ikke hinanden; langt fra det kan de faktisk supplere hinanden.

Denne artikel dækker de to første måder (SvarEnhed og @ResponseStatus). Hvis du gerne vil lære mere om brug @ControllerAdvice og @ExceptionHandler, kan du læse om det her.

2.1. Returnering af statuskoder via en SvarEnhed

I en standard Spring MVC-controller definerer vi en simpel kortlægning:

@RequestMapping (værdi = "/ controller", metode = RequestMethod.GET) @ResponseBody offentlig ResponseEntity sendViaResponseEntity () {returner ny ResponseEntity (HttpStatus.NOT_ACCEPTABLE); }

Efter modtagelse af en GET-anmodning om at “/ controller“, Spring vil returnere et svar med 406-koden (ikke acceptabelt). Vi valgte vilkårligt den specifikke svarkode til dette eksempel. Du kan returnere enhver HTTP-statuskode (den fulde liste kan findes her).

2.2. Returnering af statuskoder via en undtagelse

Vi tilføjer en anden metode til controlleren for at demonstrere, hvordan man bruger en Undtagelse for at returnere en statuskode:

@RequestMapping (værdi = "/ undtagelse", metode = RequestMethod.GET) @ResponseBody offentlig ResponseEntity sendViaException () {kast ny ForbiddenException (); }

Efter modtagelse af en GET-anmodning om at “/undtagelse”, Foråret vil kaste en ForbiddenException. Dette er en brugerdefineret undtagelse, som vi definerer i en separat klasse:

@ResponseStatus (HttpStatus.FORBIDDEN) offentlig klasse ForbiddenException udvider RuntimeException {}

Der kræves ingen kode i denne undtagelse. Alt arbejdet udføres af @ResponseStatus kommentar.

I dette tilfælde, når undtagelsen kastes, returnerer den controller, der kastede den, et svar med svarkoden 403 (Forbidden). Hvis det er nødvendigt, kan du også tilføje en besked i kommentaren, der returneres sammen med svaret.

I dette tilfælde vil klassen se sådan ud:

@ResponseStatus (værdi = HttpStatus.FORBIDDEN, årsag = "For at vise et eksempel på en brugerdefineret besked") offentlig klasse ForbiddenException udvider RuntimeException {}

Det er vigtigt at bemærke, at selvom det er teknisk muligt at få en undtagelse til at returnere enhver statuskode, er det i de fleste tilfælde kun logisk fornuftigt at bruge undtagelser til fejlkoder (4XX og 5XX).

3. Konklusion

Selvstudiet viste, hvordan man returnerer brugerdefinerede statuskoder fra Spring MVC-controllere.

Implementeringen kan findes i eksemplet med GitHub-projektet.


$config[zx-auto] not found$config[zx-overlay] not found