Vraćanje prilagođenih statusnih kodova iz proljetnih kontrolera

1. Pregled

Ovaj kratki članak pokazat će nekoliko načina za vratiti prilagođene HTTP statusne kodove s Spring MVC kontrolera.

To je često važno radi jasnijeg izražavanja rezultata zahtjeva klijentu i korištenja pune bogate semantike HTTP protokola. Na primjer, ako nešto pođe po zlu sa zahtjevom, slanje određenog koda pogreške za svaku vrstu mogućeg problema omogućilo bi klijentu da prikaže odgovarajuću poruku pogreške korisniku.

Postavljanje osnovnog proljetnog MVC projekta izvan je dosega ovog članka, ali ovdje možete pronaći više informacija.

2. Vraćanje prilagođenih statusnih kodova

Spring pruža nekoliko primarnih načina za vraćanje prilagođenih statusnih kodova sa svojih Kontroler klase:

  • pomoću a ResponseEntity
  • koristiti @ResponseStatus napomena o klasama iznimki i
  • koristiti @ControllerAdvice i @ExceptionHandler bilješke.

Te se mogućnosti međusobno ne isključuju; daleko od toga, oni se zapravo mogu nadopunjavati.

Ovaj će članak obuhvatiti prva dva načina (ResponseEntity i @ResponseStatus). Ako želite saznati više o korištenju @ControllerAdvice i @ExceptionHandler, o tome možete pročitati ovdje.

2.1. Vraćanje statusnih kodova putem a ResponseEntity

U standardnom MVC kontroleru Spring definirat ćemo jednostavno mapiranje:

@RequestMapping (value = "/ controller", method = RequestMethod.GET) @ResponseBody public ResponseEntity sendViaResponseEntity () {return new ResponseEntity (HttpStatus.NOT_ACCEPTABLE); }

Po primanju zahtjeva za GET za „/ kontroler“, Spring će odgovoriti s kodom 406 (nije prihvatljivo). Samovoljno smo odabrali određeni kod odgovora za ovaj primjer. Možete vratiti bilo koji HTTP statusni kod (cijeli popis možete pronaći ovdje).

2.2. Vraćanje statusnih kodova putem iznimke

Nadzorniku ćemo dodati drugu metodu da pokažemo kako se koristi Iznimka za povratak statusnog koda:

@RequestMapping (vrijednost = "/ iznimka", metoda = RequestMethod.GET) @ResponseBody javni ResponseEntity sendViaException () {baciti novi ForbiddenException (); }

Po primanju zahtjeva za GET za „/ iznimka“, Proljeće će baciti a Zabranjeno izuzeće. Ovo je prilagođena iznimka koju ćemo definirati u zasebnoj klasi:

@ResponseStatus (HttpStatus.FORBIDDEN) javna klasa ForbiddenException proširuje RuntimeException {}

U ovoj iznimci nije potreban kod. Sav posao obavlja @ResponseStatus bilješka.

U ovom slučaju, kada se izuzetak izbaci, kontroler koji ga je bacio vraća odgovor s kodom odgovora 403 (Zabranjeno). Ako je potrebno, u napomenu možete dodati i poruku koja će se vratiti zajedno s odgovorom.

U ovom slučaju razred bi izgledao ovako:

@ResponseStatus (value = HttpStatus.FORBIDDEN, reason = "Za prikaz primjera prilagođene poruke") javna klasa ForbiddenException proširuje RuntimeException {}

Važno je napomenuti da iako je tehnički moguće napraviti iznimku koja vraća bilo koji statusni kôd, u većini slučajeva logično je koristiti iznimke samo za kodove pogrešaka (4XX i 5XX).

3. Zaključak

Vodič je pokazao kako vratiti prilagođene statusne kodove s Spring MVC kontrolera.

Implementacija se može naći u primjeru GitHub projekta.