A Spring ResponseEntity használata a HTTP válasz kezeléséhez

1. Bemutatkozás

A Spring használatával általában sokféleképpen érhetjük el ugyanazt a célt, beleértve a HTTP-válaszok finomhangolását.

Ebben a rövid bemutatóban megtudhatjuk, hogyan állíthatjuk be a HTTP-válasz törzsét, állapotát és fejléceit ResponseEntity.

2. ResponseEntity

ResponseEntityképviseli a teljes HTTP választ: állapotkódot, fejléceket és törzset. Ennek eredményeként felhasználhatjuk a HTTP válasz teljes konfigurálására.

Ha használni akarjuk, akkor vissza kell adnunk a végpontról; A többiről a tavasz gondoskodik.

ResponseEntity általános típus. Következésképpen bármilyen típust használhatunk válaszként:

@GetMapping ("/ hello") ResponseEntity hello () {return new ResponseEntity ("Hello World!", HttpStatus.OK); }

Mivel programszerűen adjuk meg a válaszállapotot, különböző státuskódokkal térhetünk vissza a különböző forgatókönyvekhez:

@GetMapping ("/ age") ResponseEntity age (@RequestParam ("yearOfBirth") int yearOfBirth) {if (isInFuture (yearOfBirth)) {return new ResponseEntity ("A születési év nem lehet a jövőben", HttpStatus.BAD_REQUEST); } return new ResponseEntity ("A korod" + calcAge (yearOfBirth), HttpStatus.OK); }

Ezenkívül beállíthatunk HTTP fejléceket is:

@GetMapping ("/ customHeader") ResponseEntity customHeader () {HttpHeaders fejlécek = new HttpHeaders (); fejlécek.add ("Custom-Header", "foo"); return new ResponseEntity ("Egyéni fejléckészlet", fejlécek, HttpStatus.OK); }

Továbbá, ResponseEntitykét beágyazott építői felületet biztosít: HeadersBuilder és annak felülete, Testépítő. Ezért a statikus módszerekkel hozzáférhetünk képességeikhez ResponseEntity.

A legegyszerűbb eset egy válasz testtel és HTTP 200 válaszkóddal:

@GetMapping ("/ hello") ResponseEntity hello () {return ResponseEntity.ok ("Hello World!"); }

A legnépszerűbb HTTP állapotkódokhoz statikus módszereket kapunk:

BodyBuilder elfogadta (); BodyBuilder badRequest (); BodyBuilder létrehozva (java.net.URI hely); HeadersBuilder noContent (); HeadersBuilder notFound (); BodyBuilder ok ();

Ezen felül használhatjuk a BodyBuilder állapot (HttpStatus állapot) és a BodyBuilder állapot (int állapot) módszerek bármilyen HTTP állapot beállításához.

Végül a ResponseEntity BodyBuilder.body (T törzs) beállíthatjuk a HTTP választestet:

@GetMapping ("/ age") ResponseEntity age (@RequestParam ("yearOfBirth") int yearOfBirth) {if (isInFuture (yearOfBirth)) {return ResponseEntity.badRequest () .body ("A születési év nem lehet a jövőben") ; } return ResponseEntity.status (HttpStatus.OK) .body ("Az életkorod" + calcAge (yearOfBirth)); }

Beállíthatunk egyedi fejléceket is:

@GetMapping ("/ customHeader") ResponseEntity customHeader () {return ResponseEntity.ok () .header ("Custom-Header", "foo") .body ("Egyéni fejléckészlet"); }

Mivel BodyBuilder.body () visszatér a ResponseEntity ahelyett Testépítő, ez legyen az utolsó hívás.

Vegye figyelembe, hogy a HeaderBuilder nem állíthatjuk be a választest tulajdonságait.

Visszatérés közben ResponseEntity objektumot a vezérlőtől, kivételt vagy hibát kaphatunk a kérés feldolgozása során, és szeretnénk küldjön hibával kapcsolatos információkat a valamilyen más típusként képviselt felhasználónak, mondjuk E-nek.

A 3.2 tavasz egy globális támogatást nyújt @ExceptionHandler az újval @ControllerAdvice kommentár, amely az ilyen típusú forgatókönyveket kezeli. Részletes részleteket itt talál a meglévő cikkünkben.

Míg ResponseEntity nagyon erős, nem szabad túlzásba vinni. Egyszerű esetekben vannak más lehetőségek, amelyek kielégítik az igényeinket, és sokkal tisztább kódot eredményeznek.

3. Alternatívák

3.1. @ResponseBody

A klasszikus tavaszi MVC alkalmazásokban a végpontok általában renderelt HTML oldalakat adnak vissza. Néha csak a tényleges adatokat kell visszaadnunk; például amikor az AJAX-szal együtt használjuk a végpontot.

Ilyen esetekben a kéréskezelő módszert jelölhetjük @ResponseBody, és A Spring a módszer eredményértékét HTTP válaszként kezeli maga.

További információ: ez a cikk jó kiindulópont.

3.2. @ResponseStatus

Amikor a végpont sikeresen visszatér, a Spring HTTP 200 (OK) választ ad. Ha a végpont kivételt dob, a Spring keres egy kivételkezelőt, amely megmondja, hogy mely HTTP állapotot használja.

Ezeket a módszereket a @ResponseStatus, tehát a Spring segítségével jelölhetjük meg egyedi HTTP státusszal tér vissza.

További példákért olvassa el cikkünket az egyéni állapotkódokról.

3.3. Közvetlenül manipulálja a választ

A tavasz lehetővé teszi, hogy hozzáférjünk a javax.servlet.http.HttpServletResponse közvetlenül objektum; csak metódus argumentumként kell deklarálnunk:

@GetMapping ("/ manual") void manual (HttpServletResponse response) dobja az IOException {response.setHeader ("Custom-Header", "foo"); response.setStatus (200); response.getWriter (). println ("Helló világ!"); }

Mivel tavasz absztrakciókat és további képességeket kínál az alapul szolgáló megvalósítás felett, nem szabad így manipulálnunk a választ.

4. Következtetés

Ebben a cikkben megvitattuk a HTTP válasz tavaszi manipulálásának több módját, és megvizsgáltuk azok előnyeit és hátrányait.

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