Spring's RequestBody i ResponseBody Bilješke

1. Uvod

U ovom brzom uputstvu pružamo sažeti pregled proljeća @RequestBody i @ResponseBody bilješke.

2. @RequestBody

Jednostavno rečeno, the @RequestBody napomena mapira HttpRequest tijelo na objekt prijenosa ili domene, omogućujući automatsku deserializaciju dolaznog HttpRequest tijelo na Java objekt.

Prvo, pogledajmo metodu Spring kontrolera:

@PostMapping ("/ request") javni ResponseEntity postController (@RequestBody LoginForm loginForm) {exampleService.fakeAuthenticate (loginForm); vratiti ResponseEntity.ok (HttpStatus.OK); }

Spring automatski deserijalizira JSON u Java tip, pod pretpostavkom da je naveden odgovarajući.

Prema zadanim postavkama, vrsta koju označavamo s @RequestBody napomena mora odgovarati JSON-u poslanom od našeg kontrolera na strani klijenta:

javna klasa LoginForm {privatni niz korisničko ime; privatna lozinka za niz; // ...}

Ovdje je objekt koji koristimo za predstavljanje HttpRequest mape tijela na naš Obrazac za prijavu objekt.

Isprobajmo ovo koristeći CURL:

curl -i \ -H "Accept: application / json" \ -H "Content-Type: application / json" \ -X POST --data '{"username": "johnny", "password": "password"} '"//localhost:8080/.../request"

To je sve što nam treba za Spring REST API i Angular klijenta pomoću @RequestBody bilješka.

3. @ResponseBody

The @ResponseBody napomena govori kontroloru da se vraćeni objekt automatski serializira u JSON i vraća natrag u HttpResponse objekt.

Pretpostavimo da imamo običaj Odgovor objekt:

javna klasa ResponseTransfer {tekst privatnog niza; // standardni getteri / postavljači}

Dalje, pridruženi kontroler može se implementirati:

@Controller @RequestMapping ("/ post") javna klasa ExamplePostController {@Autowired ExampleService exampleService; @PostMapping ("/ response") @ResponseBody javni ResponseTransfer postResponseController (@RequestBody LoginForm loginForm) {return new ResponseTransfer ("Hvala na objavi !!!"); }}

Na razvojnoj konzoli našeg preglednika ili pomoću alata poput Poštara možemo vidjeti sljedeći odgovor:

{"text": "Hvala što ste objavili !!!"}

Zapamtite, ne trebamo bilježiti @ RestController-komentirao kontrolere s @ResponseBody bilješka budući da Spring to čini prema zadanim postavkama.

3.1. Postavljanje vrste sadržaja

Kada koristimo @ResponseBody napomena, još uvijek možemo eksplicitno postaviti vrstu sadržaja koju naša metoda vraća.

Za to, možemo koristiti @RequestMapping‘S proizvodi atribut. Imajte na umu da bilješke poput @PostMapping, @GetMappingitd. definiraju pseudonime za taj parametar.

Dodajmo sada novu krajnju točku koja šalje JSON odgovor:

@PostMapping (value = "/ content", produce = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public ResponseTransfer postResponseJsonContent (@RequestBody LoginForm loginForm) {return new ResponseTransfer ("JSON Content!"); }

U primjeru smo koristili Vrsta medija.APPLICATION_JSON_VALUE konstantno. Alternativno, možemo koristiti aplikacija / json direktno.

Dalje, implementiramo novu metodu, preslikanu na istu /sadržaj put, ali umjesto toga vraća XML sadržaj:

@PostMapping (value = "/ content", produce = MediaType.APPLICATION_XML_VALUE) @ResponseBody public ResponseTransfer postResponseXmlContent (@RequestBody LoginForm loginForm) {return new ResponseTransfer ("XML Content!"); }

Sada, ovisno o vrijednosti an Prihvatiti parametar poslan u zaglavlju zahtjeva, dobit ćemo različite odgovore.

Pogledajmo ovo na djelu:

curl -i \ -H "Accept: application / json" \ -H "Content-Type: application / json" \ -X POST --data '{"username": "johnny", "password": "password"} '"//localhost:8080/.../content"

Naredba CURL vraća JSON odgovor:

HTTP / 1.1 200 Sadržaj-vrsta: application / json Prijenos-kodiranje: podijeljeno Datum: Četvrtak, 20. veljače 2020. 19:43:06 GMT {"text": "JSON Content!"}

Promijenimo sada Prihvatiti parametar:

curl -i \ -H "Accept: application / xml" \ -H "Content-Type: application / json" \ -X POST --data '{"username": "johnny", "password": "password"} '"//localhost:8080/.../content"

Kao što je i predviđeno, ovaj put dobivamo XML sadržaj:

HTTP / 1.1 200 Sadržaj - vrsta: aplikacija / kodiranje prijenosa xml: podijeljeno Datum: Četvrtak, 20. veljače 2020. 19:43:19 GMT XML sadržaj!

4. Zaključak

Izradili smo jednostavni Angular klijent za aplikaciju Spring koji pokazuje kako se koristi @RequestBody i @ResponseBody bilješke.

Pored toga, pokazali smo kako postaviti vrstu sadržaja prilikom upotrebe @ResponseBody.

Kao i uvijek, uzorci koda dostupni su na GitHubu.