Používanie Spring ResponseEntity na manipuláciu s odpoveďou HTTP

1. Úvod

Pomocou jari zvyčajne máme veľa spôsobov, ako dosiahnuť rovnaký cieľ, vrátane doladenia odpovedí HTTP.

V tomto krátkom tutoriáli sa dozvieme, ako nastaviť telo, stav a hlavičky odpovedí HTTP pomocou ResponseEntity.

2. ResponseEntity

ResponseEntitypredstavuje celú odpoveď HTTP: stavový kód, hlavičky a telo. Vďaka tomu ho môžeme použiť na úplnú konfiguráciu odpovede HTTP.

Ak ho chceme použiť, musíme ho vrátiť z koncového bodu; O zvyšok sa stará jar.

ResponseEntity je generický typ. V dôsledku toho môžeme ako text odpovede použiť akýkoľvek typ:

@GetMapping ("/ hello") ResponseEntity ahoj () {vrátiť nové ResponseEntity ("Hello World!", HttpStatus.OK); }

Pretože programovo určujeme stav odpovede, môžeme sa vrátiť s rôznymi stavovými kódmi pre rôzne scenáre:

@GetMapping ("/ age") ResponseEntity age (@RequestParam ("yearOfBirth") int yearOfBirth) {if (isInFuture (yearOfBirth)) {return new ResponseEntity ("Rok narodenia nemôže byť v budúcnosti", HttpStatus.BAD_REQUEST); } vrátiť nové ResponseEntity ("Váš vek je" + vypočítaťAge (yearOfBirth), HttpStatus.OK); }

Ďalej môžeme nastaviť hlavičky HTTP:

@GetMapping ("/ customHeader") ResponseEntity customHeader () {hlavičky HttpHeaders = nové HttpHeaders (); headers.add ("Vlastná hlavička", "foo"); vrátiť novú ResponseEntity ("Vlastná sada hlavičiek", hlavičky, HttpStatus.OK); }

Ďalej ResponseEntityposkytuje dve vnorené rozhrania staviteľa: HeadersBuilder a jeho podrozhranie, Kulturista. Preto môžeme pristupovať k ich schopnostiam prostredníctvom statických metód metódy ResponseEntity.

Najjednoduchším prípadom je odpoveď s textom a kódom odpovede HTTP 200:

@GetMapping ("/ hello") ResponseEntity ahoj () {návrat ResponseEntity.ok ("Hello World!"); }

Pre najobľúbenejšie stavové kódy HTTP dostávame statické metódy:

BodyBuilder akceptované (); BodyBuilder badRequest (); Vytvorený BodyBuilder (umiestnenie java.net.URI); HeadersBuilder noContent (); HeadersBuilder notFound (); BodyBuilder ok ();

Okrem toho môžeme použiť Stav BodyBuilder (stav HttpStatus) a Stav BodyBuilder (stav int) metódy na nastavenie ľubovoľného stavu HTTP.

Nakoniec s ResponseEntity BodyBuilder.body (telo T) môžeme nastaviť telo odpovede HTTP:

@GetMapping ("/ age") ResponseEntity age (@RequestParam ("yearOfBirth") int yearOfBirth) {if (isInFuture (yearOfBirth)) {return ResponseEntity.badRequest () .body ("Rok narodenia nemôže byť v budúcnosti") ; } návrat ResponseEntity.status (HttpStatus.OK) .body ("Váš vek je" + CalcAge (yearOfBirth)); }

Môžeme tiež nastaviť vlastné hlavičky:

@GetMapping ("/ customHeader") ResponseEntity customHeader () {return ResponseEntity.ok () .header ("Custom-Header", "foo") .body ("Custom header set"); }

Odkedy BodyBuilder.body () vracia a ResponseEntity namiesto Kulturista, malo by to byť posledné volanie.

Všimnite si, že s HeaderBuilder nemôžeme nastaviť žiadne vlastnosti tela odpovede.

Pri návrate ResponseEntity objekt z radiča, môžeme pri spracovaní žiadosti dostať výnimku alebo chybu a chceli by sme vráti užívateľovi informácie súvisiace s chybou reprezentované ako nejaký iný typ, povedzme E.

Jar 3.2 prináša podporu globálnemu @ExceptionHandler s novým @ControllerAdvice anotácia, ktorý sa zaoberá týmito druhmi scenárov. Podrobné informácie nájdete v našom existujúcom článku tu.

Zatiaľ čo ResponseEntity je veľmi silný, nemali by sme ho nadmerne používať. V jednoduchých prípadoch existujú aj ďalšie možnosti, ktoré uspokoja naše potreby a výsledkom je oveľa čistejší kód.

3. Alternatívy

3.1. @ResponseBody

V klasických jarných aplikáciách MVC koncové body zvyčajne vrátia vykreslené stránky HTML. Niekedy nám stačí vrátiť iba skutočné údaje; napríklad keď použijeme koncový bod s AJAX.

V takýchto prípadoch môžeme metódu obsluhy žiadosti označiť @ResponseBodya Jar považuje výslednú hodnotu metódy za telo odpovede HTTP sám.

Pre viac informácií je tento článok dobrým začiatkom.

3.2. @ResponseStatus

Keď sa koncový bod vráti úspešne, Spring poskytne odpoveď HTTP 200 (OK). Ak koncový bod vyvolá výnimku, Spring vyhľadá obslužný program výnimiek, ktorý určí, ktorý stav HTTP sa má použiť.

Tieto metódy môžeme označiť pomocou @ResponseStatus, a teda Spring vráti s vlastným stavom HTTP.

Ďalšie príklady nájdete v našom článku o vlastných stavových kódoch.

3.3. Priamo manipulujte s odpoveďou

Jar nám tiež umožňuje prístup k javax.servlet.http.HttpServletResponse objekt priamo; musíme to deklarovať iba ako argument metódy:

@GetMapping ("/ manual") void manual (HttpServletResponse response) hodí IOException {response.setHeader ("Custom-Header", "foo"); response.setStatus (200); response.getWriter (). println ("Hello World!"); }

Pretože jar poskytuje abstrakcie a ďalšie funkcie nad základnú implementáciu, nemali by sme manipulovať odpoveďou týmto spôsobom.

4. Záver

V tomto článku sme diskutovali o viacerých spôsoboch manipulácie s odpoveďou HTTP na jar a preskúmali sme ich výhody a nevýhody.

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


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