Korištenje Spring @ResponseStatus za postavljanje HTTP statusnog koda
1. Uvod
U proljetnom MVC-u imamo mnogo načina da to učinimo postaviti statusni kôd HTTP odgovora.
U ovom kratkom vodiču vidjet ćemo najjednostavniji način: korištenje @ResponseStatus bilješka.
2. O metodama kontrolera
Kada se krajnja točka uspješno vrati, Spring pruža HTTP 200 (OK) odgovor.
Ako želimo navesti status odziva metode kontrolera, možemo označiti tu metodu s @ResponseStatus. Ima dva zamjenjiva argumenta za željeni status odgovora: kodirati, i vrijednost. Na primjer, možemo naznačiti da poslužitelj odbija kuhati kavu jer je čajnik:
@ResponseStatus (HttpStatus.I_AM_A_TEAPOT) void teaPot () {}
Kada želimo signalizirati pogrešku, možemo pružiti poruku o pogrešci putem razlog argument:
@ResponseStatus (HttpStatus.BAD_REQUEST, reason = "Neki su parametri nevaljani") void onIllegalArgumentException (IllegalArgumentException iznimka) {}
Imajte na umu da kada postavimo razlog, Proljetni pozivi HttpServletResponse.sendError (). Stoga će poslati HTML stranica s pogreškama prema klijentu, što je čini neprikladnom za REST krajnje točke.
Također imajte na umu da Spring koristi samo @ResponseStatus, kada označena metoda uspješno završava (bez bacanja znaka Iznimka).
3. S upravljačima pogreškama
Imamo tri načina za korištenje @ResponseStatus pretvoriti an Iznimka na status HTTP odgovora:
- koristeći @ExceptionHandler
- koristeći @ControllerAdvice
- obilježavanje Iznimka razred
Da bismo koristili prva dva rješenja, moramo definirati metodu obrade pogrešaka. Više o ovoj temi možete pročitati u ovom članku.
Možemo koristiti @ResponseStatus uz ove metode obrade pogrešaka na isti način kao i kod uobičajenih MVC metoda u prethodnom odjeljku.
Kada nam ne trebaju dinamički odgovori na pogreške, najjednostavnije rješenje je treće: označavanje klase Exception s @ResponseStatus:
@ResponseStatus (code = HttpStatus.BAD_REQUEST) klasa CustomException proširuje RuntimeException {}
Kad ovo uhvati Proljeće Iznimka, koristi postavke koje smo naveli u @ResponseStatus.
Imajte na umu da kada označimo znak Iznimka razred sa @ResponseStatus, Proljeće uvijek zove HttpServletResponse.sendError (), da li smo postavili razlog ili ne.
Također imajte na umu da Spring koristi istu konfiguraciju za potklase, osim ako ih ne označimo s @ResponseStatus, isto.
4. Zaključak
U ovom smo članku vidjeli kako se možemo koristiti @ResponseStatus za postavljanje koda HTTP odgovora u različitim scenarijima, uključujući rukovanje pogreškama.
Kao i obično, primjeri su dostupni na GitHubu.