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.