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.