A Spring @ResponseStatus használata a HTTP állapotkód beállításához

1. Bemutatkozás

A tavaszi MVC-ben sokféleképpen lehet állítsa be a HTTP válasz állapotkódját.

Ebben a rövid bemutatóban a legegyszerűbb módszert fogjuk látni: a @ResponseStatus annotáció.

2. A vezérlő módszereiről

Amikor a végpont sikeresen visszatér, a Spring HTTP 200 (OK) választ ad.

Ha meg akarjuk adni a egy vezérlő módszer válaszállapota, jelölhetjük azt a módszert @ResponseStatus. Két felcserélhető argumentuma van a kívánt válaszállapotra vonatkozóan: kód, és érték. Például jelezhetjük, hogy a szerver nem hajlandó kávét főzni, mert ez egy teáskanna:

@ResponseStatus (HttpStatus.I_AM_A_TEAPOT) void teaPot () {}

Ha hibát akarunk jelezni, akkor a ok érv:

@ResponseStatus (HttpStatus.BAD_REQUEST, oka = "Néhány paraméter érvénytelen") void onIllegalArgumentException (IllegalArgumentException kivétel) {}

Ne feledje, hogy amikor beállítjuk ok, Tavaszi hívások HttpServletResponse.sendError (). Ezért küld egy HTML hiba oldal az ügyfélnek, ami rosszul illeszkedik a REST végpontokhoz.

Vegye figyelembe azt is, hogy a Spring csak használ @ResponseStatus, mikor a megjelölt módszer sikeresen befejeződik (anélkül, hogy egy Kivétel).

3. Hibakezelőkkel

Három módon tudjuk használni @ResponseStatus átalakítani egy Kivétel HTTP válasz állapotra:

  • felhasználásával @ExceptionHandler
  • felhasználásával @ControllerAdvice
  • a Kivétel osztály

Az első két megoldás használatához meg kell határoznunk egy hibakezelő módszert. Ebben a témában többet olvashat ebben a cikkben.

Tudjuk használni @ResponseStatus ezekkel a hibakezelő módszerekkel ugyanúgy, mint a szokásos MVC módszerekkel az előző szakaszban.

Ha nincs szükségünk dinamikus hibaválaszokra, akkor a legegyszerűbb megoldás a harmadik: a Kivétel osztály jelölése @ResponseStatus:

@ResponseStatus (code = HttpStatus.BAD_REQUEST) osztály A CustomException kiterjeszti a RuntimeException {}

Amikor Spring elkapja ezt Kivétel, az általunk megadott beállításokat használja @ResponseStatus.

Ne feledje, hogy amikor egy Kivétel osztályban @ResponseStatus, Tavasz mindig hív HttpServletResponse.sendError (), hogy beállítottunk-e ok vagy nem.

Vegye figyelembe azt is, hogy a Spring ugyanazt a konfigurációt használja az alosztályokhoz, hacsak nem jelöljük őket @ResponseStatus, is.

4. Következtetés

Ebben a cikkben láttuk, hogyan használhatjuk @ResponseStatus a HTTP válaszkód beállítása különböző esetekben, beleértve a hibakezelést is.

Szokás szerint a példák elérhetők a GitHub oldalon.