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.