Egyedi állapotkódok visszaküldése a rugós vezérlőktől

1. Áttekintés

Ez a rövid cikk bemutatja néhány módját adja vissza az egyéni HTTP állapotkódokat a tavaszi MVC vezérlőktől.

Ez gyakran fontos annak érdekében, hogy egyértelműbben kifejezhessük a kérés eredményét az ügyfél számára, és a HTTP protokoll teljes gazdag szemantikáját használjuk. Például, ha valami elromlik egy kéréssel, akkor az esetleges problématípusokhoz külön hibakódot küldve az ügyfél megfelelő hibaüzenetet jeleníthet meg a felhasználó számára.

Az alap tavaszi MVC projekt beállítása kívül esik a cikk keretein, de itt további információkat talál.

2. Az egyedi állapotkódok visszaadása

A Spring néhány elsődleges módot kínál az egyéni állapotkódok visszaadására Vezérlő osztályok:

  • használva ResponseEntity
  • használni a @ResponseStatus - megjegyzés a kivételes osztályokról, és -
  • használni a @ControllerAdvice és @ExceptionHandler annotációk.

Ezek az opciók nem zárják ki egymást; messze attól valójában kiegészíthetik egymást.

Ez a cikk az első két módon foglalkozik (ResponseEntity és @ResponseStatus). Ha többet szeretne megtudni a használatáról @ControllerAdvice és @ExceptionHandler, itt olvashat róla.

2.1. Az állapotkódok visszaküldése a ResponseEntity

Egy szokásos Spring MVC vezérlőben meghatározunk egy egyszerű leképezést:

@RequestMapping (érték = "/ vezérlő", módszer = RequestMethod.GET) @ResponseBody nyilvános ResponseEntity sendViaResponseEntity () {return new ResponseEntity (HttpStatus.NOT_ACCEPTABLE); }

Miután megkapta a GET kérést,/vezérlő“, Spring válaszot ad a 406-os kóddal (nem elfogadható). Önkényesen választottuk ki a konkrét válaszkódot ehhez a példához. Bármely HTTP állapotkódot visszaadhat (a teljes lista itt található).

2.2. Állapotkódok visszaadása kivételen keresztül

Hozzáadunk egy második módszert a vezérlőhöz annak bemutatására, hogy miként kell használni Kivétel állapotkód visszaadásához:

@RequestMapping (érték = "/ kivétel", módszer = RequestMethod.GET) @ResponseBody nyilvános ResponseEntity sendViaException () {dobjon új ForbiddenException (); }

Amikor megkapta a GET kérést,/kivétel“, Spring bedob a ForbiddenException. Ez egy egyedi kivétel, amelyet külön osztályban fogunk meghatározni:

A @ResponseStatus (HttpStatus.FORBIDDEN) nyilvános osztály, a ForbiddenException kiterjeszti a RuntimeException {}

Ebben a kivételben nincs szükség kódra. Az összes munkát a @ResponseStatus annotáció.

Ebben az esetben a kivétel dobásakor az azt dobó vezérlő a 403 (Tiltott) válaszkóddal válaszol vissza. Ha szükséges, hozzáadhat egy üzenetet is a kommentárhoz, amelyet a válaszsal együtt visszaküld.

Ebben az esetben az osztály így néz ki:

@ResponseStatus (value = HttpStatus.FORBIDDEN, oka = "Egyéni üzenet példájának megjelenítéséhez") a ForbiddenException nyilvános osztály kiterjeszti a RuntimeException {}

Fontos megjegyezni, hogy bár technikailag lehetséges, hogy egy kivétel bármilyen állapotkódot adjon vissza, a legtöbb esetben logikus értelemben csak a hibakódok (4XX és 5XX) kivételét kell használni.

3. Következtetés

Az oktatóanyag bemutatta, hogyan lehet az egyéni állapotkódokat visszaadni a Spring MVC vezérlőktől.

A megvalósítás megtalálható a példa GitHub projektben.