Používanie Spring @ResponseStatus na nastavenie stavového kódu HTTP

1. Úvod

Na jar MVC máme veľa spôsobov, ako nastaví stavový kód odpovede HTTP.

V tomto krátkom tutoriáli uvidíme najpriamočiarejšiu cestu: použitie @ResponseStatus anotácia.

2. Na ovládacích metódach

Keď sa koncový bod vráti úspešne, Spring poskytne odpoveď HTTP 200 (OK).

Ak chceme spresniť stav odozvy metódy radiča, môžeme túto metódu označiť @ResponseStatus. Má dva zameniteľné argumenty pre požadovaný stav odpovede: kód, a hodnotu. Môžeme napríklad naznačiť, že server odmieta pripravovať kávu, pretože ide o čajovú kanvicu:

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

Ak chceme signalizovať chybu, môžeme poskytnúť chybové hlásenie prostredníctvom dôvod argument:

@ResponseStatus (HttpStatus.BAD_REQUEST, reason = "Niektoré parametre sú neplatné") void onIllegalArgumentException (výnimka IllegalArgumentException) {}

Všimnite si, že keď sme nastavili dôvod, Volá jar HttpServletResponse.sendError (). Preto pošle Chybová stránka HTML pre klienta, čo ju robí zle vhodnou pre koncové body REST.

Upozorňujeme tiež, že jar iba používa @ResponseStatus, kedy označená metóda sa úspešne dokončila (bez hádzania Výnimka).

3. S obsluhou chýb

Máme tri spôsoby použitia @ResponseStatus previesť Výnimka do stavu odpovede HTTP:

  • použitím @ExceptionHandler
  • použitím @ControllerAdvice
  • značenie Výnimka trieda

Aby sme mohli použiť prvé dve riešenia, musíme definovať metódu obsluhy chýb. Viac o tejto téme sa dočítate v tomto článku.

Môžeme použiť @ResponseStatus s týmito metódami obsluhy chýb rovnakým spôsobom, ako sme to robili s bežnými metódami MVC v predchádzajúcej časti.

Ak nepotrebujeme dynamické chybové reakcie, najpriamejšie riešenie je tretie: označenie triedy Exception pomocou @ResponseStatus:

@ResponseStatus (code = HttpStatus.BAD_REQUEST) trieda CustomException rozširuje RuntimeException {}

Keď to Spring chytí Výnimka, používa nastavenia, ktoré sme poskytli v @ResponseStatus.

Upozorňujeme, že keď označíme znak Výnimka trieda s @ResponseStatus, Jar vždy volá HttpServletResponse.sendError (), či sme nastavili dôvod alebo nie.

Upozorňujeme tiež, že Spring používa rovnakú konfiguráciu pre podtriedy, pokiaľ ich neoznačíme @ResponseStatus, tiež.

4. Záver

V tomto článku sme videli, ako môžeme využiť @ResponseStatus nastaviť kód odpovede HTTP v rôznych scenároch vrátane spracovania chýb.

Ako obvykle sú príklady k dispozícii na GitHub.


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