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.


$config[zx-auto] not found$config[zx-overlay] not found