Jarné anotácie RequestBody a ResponseBody
1. Úvod
V tomto rýchlom návode poskytujeme stručný prehľad jari @RequestBody a @ResponseBody anotácie.
2. @RequestBody
Jednoducho povedané, the @RequestBody anotácia mapuje HttpRequest telo na objekt prevodu alebo domény, čo umožňuje automatickú deserializáciu prichádzajúcich HttpRequest telo na objekt Java.
Najprv sa pozrime na metódu pružinového ovládača:
@PostMapping ("/ požiadavka") public ResponseEntity postController (@RequestBody LoginForm loginForm) {exampleService.fakeAuthenticate (loginForm); návrat ResponseEntity.ok (HttpStatus.OK); }
Jar automaticky rekonštruuje JSON na typ Java, za predpokladu, že je zadaný vhodný.
Predvolene, typ, ktorý anotujeme @RequestBody anotácia musí zodpovedať JSON odoslanému z nášho radiča na strane klienta:
verejná trieda LoginForm {súkromné reťazec používateľské meno; súkromné reťazcové heslo; // ...}
Tu objekt, ktorý používame na reprezentáciu HttpRequest mapy tela k nášmu Prihlasovací formulár objekt.
Vyskúšajme to pomocou CURL:
curl -i \ -H "Prijať: application / json" \ -H "Typ obsahu: application / json" \ -X POST --data '{"username": "johnny", "heslo": "heslo"} „„ //localhost:8080/.../request “
To je všetko, čo potrebujeme pre Spring REST API a Angular klienta pomocou @RequestBody anotácia.
3. @ResponseBody
The @ResponseBody anotácia hovorí radičovi, že vrátený objekt je automaticky serializovaný do JSON a odovzdaný späť do HttpResponse objekt.
Predpokladajme, že máme zvyk Odozva objekt:
public class ResponseTransfer {private String text; // štandardné getre / settery}
Ďalej je možné implementovať priradený radič:
@Controller @RequestMapping ("/ post") verejná trieda ExamplePostController {@Autowired ExampleService exampleService; @PostMapping ("/ response") @ResponseBody public ResponseTransfer postResponseController (@RequestBody LoginForm loginForm) {return new ResponseTransfer ("Thanks For Posting !!!"); }}
Vo vývojovej konzole nášho prehliadača alebo pomocou nástroja ako Postman môžeme vidieť nasledujúcu odpoveď:
{"text": "Ďakujeme za zverejnenie !!!"}
Pamätajte, že nemusíme anotovať @ RestController-anotované radiče s @ResponseBody anotácia od jari to robí štandardne.
3.1. Nastavenie typu obsahu
Keď použijeme @ResponseBody anotáciu, stále môžeme explicitne nastaviť typ obsahu, ktorý vráti naša metóda.
Pre to, môžeme použiť @RequestMapping‘S vyrába atribút. Upozorňujeme, že anotácie ako @PostMapping, @GetMappingatď. definovať pre tento parameter aliasy.
Teraz pridajme nový koncový bod, ktorý odošle odpoveď JSON:
@PostMapping (value = "/ content", produce = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public ResponseTransfer postResponseJsonContent (@RequestBody LoginForm loginForm) {return new ResponseTransfer ("JSON Content!"); }
V príklade sme použili MediaType.APPLICATION_JSON_VALUE konštantný. Prípadne môžeme použiť aplikácia / json priamo.
Ďalej implementujme novú metódu namapovanú na tú istú / obsah cesta, ale namiesto toho vracanie obsahu XML:
@PostMapping (value = "/ content", produce = MediaType.APPLICATION_XML_VALUE) @ResponseBody public ResponseTransfer postResponseXmlContent (@RequestBody LoginForm loginForm) {return new ResponseTransfer ("XML Content!"); }
Teraz, v závislosti od hodnoty an súhlasiť parameter odoslaný v hlavičke požiadavky, dostaneme rôzne odpovede.
Uvidíme v akcii:
curl -i \ -H "Prijať: application / json" \ -H "Typ obsahu: application / json" \ -X POST --data '{"username": "johnny", "heslo": "heslo"} „„ //localhost:8080/.../obsah “
Príkaz CURL vráti odpoveď JSON:
HTTP / 1.1 200 Typ obsahu: aplikácia / kód prenosu JSON: blokované Dátum: Št, 20. februára 2020 19:43:06 GMT {"text": "Obsah JSON!"}
Teraz poďme zmeniť súhlasiť parameter:
curl -i \ -H "Prijať: application / xml" \ -H "Typ obsahu: application / json" \ -X POST --data '{"username": "johnny", "heslo": "heslo"} „„ //localhost:8080/.../obsah “
Ako sme predpokladali, tentokrát dostaneme obsah XML:
HTTP / 1.1 200 Typ obsahu: aplikácia / xml Kódovanie prenosu: blokované Dátum: Št, 20. februára 2020 19:43:19 GMT Obsah XML!
4. Záver
Pre aplikáciu Spring sme vytvorili jednoduchý uhlový klient, ktorý ukazuje, ako používať @RequestBody a @ResponseBody anotácie.
Ďalej sme si ukázali, ako nastaviť typ obsahu pri používaní @ResponseBody.
Ako vždy, ukážky kódu sú k dispozícii na GitHub.