Tavaszi RequestBody és ResponseBody kommentárok
1. Bemutatkozás
Ebben a gyors bemutatóban tömör áttekintést nyújtunk a tavaszról @ RequestBody és @ResponseBody annotációk.
2. @ RequestBody
Egyszerűen fogalmazva, a @ RequestBody annotáció feltérképezi a HttpRequest törzs egy átviteli vagy tartományi objektumra, lehetővé téve az automatikus deszerializációt a bejövő HttpRequest törzs egy Java objektumra.
Először nézzük meg a Spring vezérlő módszert:
@PostMapping ("/ request") public ResponseEntity postController (@RequestBody LoginForm loginForm) {exampleService.fakeAuthenticate (loginForm); return ResponseEntity.ok (HttpStatus.OK); }
Spring automatikusan deszerializálja a JSON-t Java-típusgá, feltéve, hogy meg van adva egy megfelelő.
Alapértelmezés szerint, az a típus, amelyet a @ RequestBody a kommentárnak meg kell felelnie az ügyféloldali vezérlőnktől küldött JSON-nak:
public class LoginForm {private String felhasználónév; privát karakterlánc jelszó; // ...}
Itt az az objektum, amelyet a HttpRequest test térképek a mi Bejelentkezési űrlap tárgy.
Teszteljük ezt a CURL segítségével:
curl -i \ -H "Elfogadás: application / json" \ -H "Tartalomtípus: application / json" \ -X POST --data '{"felhasználónév": "johnny", "jelszó": "jelszó"} '"//localhost:8080/.../request"
Ez az, amire szükségünk van egy Spring REST API-hoz és egy Angular klienshez a @ használatávalRequestBody annotáció.
3. @ResponseBody
A @ResponseBody az annotáció azt mondja a vezérlőnek, hogy a visszaküldött objektumot automatikusan sorosítják a JSON-ba, és továbbítják a HttpResponse tárgy.
Tegyük fel, hogy van szokásunk Válasz tárgy:
public class ResponseTransfer {private String szöveg; // szokásos getters / setters}
Ezután a társított vezérlő megvalósítható:
@Controller @RequestMapping ("/ post") public class ExamplePostController {@Autowired ExampleService exampleService; @PostMapping ("/ response") @ResponseBody public ResponseTransfer postResponseController (@RequestBody LoginForm loginForm) {return new ResponseTransfer ("Köszönöm a hozzászólást !!!"); }}
Böngészőnk fejlesztői konzolján vagy egy olyan eszköz segítségével, mint a Postman, a következő választ láthatjuk:
{"text": "Köszönöm, hogy közzétetted !!!"}
Ne feledje, hogy nem kell feljegyeznünk a @ RestController-megjegyzéssel ellátott vezérlőket a @ResponseBody annotáció mivel tavasszal alapértelmezés szerint.
3.1. A Tartalom típusának beállítása
Amikor használjuk a @ResponseBody kommentár, akkor is képesek vagyunk kifejezetten beállítani a módszerünk által visszaadott tartalomtípust.
Azért, használhatjuk a @RequestMapping’S termel tulajdonság. Ne feledje, hogy a kommentárok tetszik @PostMapping, @GetMappingstb. álneveket definiálnak az adott paraméterhez.
Adjunk hozzá egy új végpontot, amely JSON-választ küld:
@PostMapping (value = "/ content", tuottaa = MediaType.APPLICATION_JSON_VALUE) @ResponseBody nyilvános ResponseTransfer postResponseJsonContent (@RequestBody LoginForm loginForm) {return new ResponseTransfer ("JSON tartalom!"); }
A példában a MediaType.APPLICATION_JSON_VALUE állandó. Alternatív megoldásként használhatjuk alkalmazás / json közvetlenül.
Ezután valósítsunk meg egy új módszert, ugyanarra a térképre építve /tartalom elérési út, de helyette XML-tartalmat ad vissza:
@PostMapping (value = "/ content", tuottaa = MediaType.APPLICATION_XML_VALUE) @ResponseBody public ResponseTransfer postResponseXmlContent (@RequestBody LoginForm loginForm) {return new ResponseTransfer ("XML tartalom!"); }
Most, an értékétől függően Elfogad paramétert a kérés fejlécében elküldve különböző válaszokat kapunk.
Lássuk ezt működés közben:
curl -i \ -H "Elfogadás: application / json" \ -H "Tartalomtípus: application / json" \ -X POST --data '{"felhasználónév": "johnny", "jelszó": "jelszó"} '"//localhost:8080/.../content"
A CURL parancs JSON választ ad vissza:
HTTP / 1.1 200 Tartalom-típus: alkalmazás / json átviteli-kódolás: darabos Dátum: Csütörtök, 2020. február 20., 19:43:06 GMT {"text": "JSON Content!"}
Most változtassunk a Elfogad paraméter:
curl -i \ -H "Accept: application / xml" \ -H "Content-Type: application / json" \ -X POST --data '{"felhasználónév": "johnny", "jelszó": "jelszó"} '"//localhost:8080/.../content"
A várakozásoknak megfelelően ezúttal XML-tartalmat kapunk:
HTTP / 1.1 200 Tartalom-típus: alkalmazás / xml Transfer-Encoding: darabos Dátum: Csütörtök, 2020. február 20. 19:43:19 GMT XML tartalom!
4. Következtetés
Építettünk egy egyszerű Angular klienst a Spring alkalmazáshoz, amely bemutatja a @ RequestBody és @ResponseBody annotációk.
Ezenkívül bemutattuk, hogyan kell beállítani a tartalom típusát a használat során @ResponseBody.
Mint mindig, a kódminták elérhetők a GitHubon.