Parametre JSON s pružinou MVC

1. Prehľad

V tomto krátkom tutoriáli sa podrobne pozrieme na to, ako pracovať s parametrami JSON v jarnom MVC.

Najskôr začneme trochou pozadia parametrov JSON. Potom pôjdeme králičou dierou, aby sme zistili, ako poslať parametre JSON v požiadavkách POST a GET.

2. Parametre JSON na jar MVC

Používanie JSON na odosielanie alebo prijímanie údajov je bežnou praxou medzi webovými vývojármi. Hierarchická štruktúra reťazcov JSON ponúka kompaktnejší a človekom čitateľný spôsob reprezentácie parametrov požiadaviek HTTP.

V predvolenom nastavení poskytuje Spring MVC out-of-the-box dátovú väzbu pre jednoduché dátové typy, ako sú String. Na tento účel používa zoznam vstavaných editorov nehnuteľností pod kapotou.

V projektoch z reálneho sveta však môžeme chcieť viazať zložitejšie dátové typy. Môže byť napríklad užitočné mapovať parameter JSON na objekt modelu.

3. Pošlite údaje JSON POST

Jar poskytuje priamy spôsob odosielania údajov JSON prostredníctvom požiadaviek POST. Zabudovaný @RequestBody anotácia môže automaticky deserializovať údaje JSON zapuzdrené v tele žiadosti do konkrétneho objektu modelu.

Vo všeobecnosti nemusíme orgán žiadosti analyzovať sami. Môžeme použiť Jacksonovu knižnicu, aby za nás urobila všetko ťažké.

Teraz sa pozrime, ako poslať údaje JSON prostredníctvom požiadavky POST na jar MVC.

Najskôr musíme vytvoriť objekt modelu, ktorý bude reprezentovať odovzdané údaje JSON. Zvážte napríklad Výrobok trieda:

verejná trieda Produkt {private int id; súkromné ​​meno reťazca; dvojitá súkromná cena; // predvolený konštruktor + getre + nastavovatelia}

Sekundárne definujme metódu Spring handler, ktorá prijíma POST požiadavky:

@PostMapping ("/ create") @ResponseBody public Product createProduct (@RequestBody Product product) {// návratový produkt vlastnej logiky; }

Ako vidíme, anotovanie výrobok argument s @RequestBody stačí zviazať údaje JSON odoslané z klientov.

Teraz môžeme otestovať našu požiadavku POST pomocou cURL:

curl -i \ -H "Prijať: application / json" \ -H "Typ obsahu: application / json" \ -X POST --data \ '{"id": 1, "name": "Asus Zenbook", "price": 800} '"// localhost: 8080 / spring-mvc-basics-4 / products / create"

4. Pošlite parameter JSON v GET

Jarné ponuky MVC @RequestParam na extrahovanie parametrov dotazu z požiadaviek GET. Avšak na rozdiel od @RequestBody, the @RequestParam anotácia podporuje iba jednoduché dátové typy ako napr int a String.

Aby sme mohli poslať JSON, budeme musieť definovať náš parameter JSON ako jednoduchý reťazec.

Veľká otázka tu znie: Ako prevedieme náš parameter JSON (čo je a String) do predmetu Výrobok trieda?

Odpoveď je dosť jednoduchá! The ObjectMapper trieda poskytovaná knižnicou Jackson ponúka flexibilný spôsob prevodu reťazcov JSON na objekty Java.

Teraz sa pozrime, ako poslať parameter JSON prostredníctvom požiadavky GET na jar MVC. Najskôr v našom ovládači budeme musieť vytvoriť inú metódu obsluhy na spracovanie požiadaviek GET:

@GetMapping ("/ get") @ResponseBody public Product getProduct (produkt reťazca @RequestParam) hodí JsonMappingException, JsonProcessingException {Product prod = objectMapper.readValue (product, Product.class); návrat prod; }

Ako je uvedené vyššie, readValue () metóda umožňuje deserializáciu parametra JSON výrobok priamo do inštancie Výrobok trieda.

Upozorňujeme, že náš parameter dotazu JSON definujeme ako a String objekt. Čo teraz, keď chceme zložiť a Výrobok objekt, ako sme to urobili pri použití @RequestBody?

Na zodpovedanie tejto otázky poskytuje Spring výstižné a flexibilné riešenie prostredníctvom editorov vlastných vlastností.

Najprv, budeme musieť vytvoriť editor vlastných vlastností na zapuzdrenie logiky prevodu parametra JSON uvedeného ako a String do a Výrobok objekt:

verejná trieda ProductEditor rozširuje PropertyEditorSupport {private ObjectMapper objectMapper; public ProductEditor (ObjectMapper objectMapper) {this.objectMapper = objectMapper; } @Override public void setAsText (textový reťazec) hodí IllegalArgumentException {if (StringUtils.isEmpty (text)) {setValue (null); } else {Product prod = new Product (); try {prod = objectMapper.readValue (text, Product.class); } catch (JsonProcessingException e) {throw new IllegalArgumentException (e); } setValue (prod); }}}

Ďalej spojíme parameter JSON s objektom Výrobok trieda:

@GetMapping ("/ get2") @ResponseBody public Product get2Product (@RequestParam Product product) {// návratový produkt vlastnej logiky; }

Na záver musíme pridať posledný chýbajúci kúsok skladačky. Poďme Registrovať ProductEditor v našom pružinovom ovládači:

@InitBinder public void initBinder (väzba WebDataBinder) {binder.registerCustomEditor (Product.class, nový ProductEditor (objectMapper)); }

Pamätajte na to na zaistenie bezpečnej prepravy musíme kódovať parameter JSON pomocou adresy URL.

Takže namiesto:

GET / spring-mvc-basics-4 / products / get2? Product = {"id": 1, "name": "Asus Zenbook", "price": 800}

Musíme poslať:

ZÍSKAJTE / spring-mvc-basics-4 / products / get2? Product =% 7B% 22id% 22% 3A% 201% 2C% 22name% 22% 3A% 20% 22Asus% 20Zenbook% 22% 2C% 22cena% 22% 3A % 20800% 7D

5. Záver

Ak to zhrnieme, videli sme, ako pracovať s JSONom na jar MVC. Počas toho sme predviedli, ako posielať parametre JSON v požiadavkách POST a GET.

Celý zdrojový kód príkladov je ako vždy k dispozícii na serveri GitHub.


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