JSON paraméterek rugós MVC-vel

1. Áttekintés

Ebben a rövid bemutatóban alaposan megvizsgáljuk, hogyan kell működni a JSON paraméterekkel a tavaszi MVC-ben.

Először is kezdünk egy kis háttérrel a JSON paraméterekről. Ezután lemegyünk a nyúl lyukán, és megnézzük, hogyan lehet JSON-paramétereket elküldeni a POST és GET kérésekben.

2. JSON-paraméterek a tavaszi MVC-ben

A JSON használata adatok küldésére vagy fogadására a webfejlesztők körében általános gyakorlat. A JSON karakterláncok hierarchikus felépítése kompaktabb és ember által olvashatóbb módot kínál a HTTP kérési paraméterek ábrázolására.

Alapértelmezés szerint a Spring MVC dobozon kívüli adatkötést biztosít az egyszerű adattípusokhoz, mint pl Húr. Erre a célra a motorháztető alatt beépített ingatlanszerkesztők listáját használja.

Valós projektekben azonban érdemes lehet összetettebb adattípusokat kötni. Például hasznos lehet egy JSON paraméter leképezése egy modellobjektumba.

3. Küldje el a JSON adatokat a POST-ban

A Spring egyszerű módot kínál a JSON-adatok POST-kérelmeken keresztül történő elküldésére. A beépített @ RequestBody az annotáció automatikusan deserializálja a kérelem törzsébe beágyazott JSON adatokat egy adott modell objektummá.

Általában nem kell magunknak elemeznünk a kérelem szervét. Használhatjuk a Jackson könyvtárat, hogy minden nehéz feladatot elvégezhessünk helyettünk.

Most nézzük meg, hogyan küldhetünk JSON-adatokat POST-kérelemen keresztül a tavaszi MVC-ben.

Először is létre kell hoznunk egy modellobjektumot, amely az átadott JSON-adatokat ábrázolja. Például vegye figyelembe a Termék osztály:

public class Termék {private int id; privát karakterlánc neve; magán dupla ár; // alapértelmezett konstruktor + getters + setters}

Másodsorban definiáljunk egy Spring kezelő módszert, amely elfogadja a POST kéréseket:

@PostMapping ("/ create") @ResponseBody public Product createProduct (@RequestBody Product product) {// egyedi logika visszatérési termék; }

Ahogy látjuk, megjegyzéssel a termék érv azzal @ RequestBody elegendő az ügyfelektől küldött JSON-adatok megkötésére.

Most tesztelhetjük POST kérésünket a cURL használatával:

curl -i \ -H "Elfogadás: application / json" \ -H "Content-Type: application / json" \ -X POST --data \ '{"id": 1, "name": "Asus Zenbook", "price": 800} '"// localhost: 8080 / spring-mvc-basics-4 / products / create"

4. Küldje el a JSON paramétert a GET-ben

Tavaszi MVC ajánlatok @RequestParam lekérdezési paraméterek kinyerése a GET kérésekből. Azonban ellentétben @ RequestBody, a @RequestParam a kommentár csak olyan egyszerű adattípusokat támogat, mint a int és Húr.

Tehát a JSON küldéséhez meg kell határoznunk a JSON paraméterünket egyszerű karakterláncként.

A nagy kérdés itt a következő: Hogyan konvertálhatjuk a JSON paraméterünket (ami a Húr) a Termék osztály?

A válasz elég egyszerű! A ObjectMapper A Jackson könyvtár által nyújtott osztály rugalmas módot kínál a JSON karakterláncok Java objektumokká alakítására.

Most nézzük meg, hogyan lehet egy JSON paramétert elküldeni egy GET-kérelemen keresztül a Spring MVC-ben. Először létre kell hoznunk egy másik kezelő módszert a vezérlőnkben a GET kérések kezelésére:

@GetMapping ("/ get") @ResponseBody public Termék getProduct (@RequestParam String termék) dobja JsonMappingException, JsonProcessingException {Product prod = objectMapper.readValue (product, Product.class); visszatérő prod; }

Amint fentebb látható, a readValue () módszer lehetővé teszi a JSON paraméter deszerializálását termék közvetlenül a Termék osztály.

Vegye figyelembe, hogy a JSON lekérdezési paraméterünket a-ként definiáljuk Húr tárgy. Mi van, ha át akarunk menni a Termék tárgy, mint mi tettük a használat során @ RequestBody?

Ennek a kérdésnek a megválaszolásához a Spring tömör és rugalmas megoldást nyújt az egyedi ingatlanszerkesztőkön keresztül.

Első, létre kell hoznunk egy egyedi tulajdonságszerkesztőt az a-ként megadott JSON paraméter konvertálásának logikájának összefoglalására Húr a Termék tárgy:

public class ProductEditor kiterjeszti a PropertyEditorSupport {private ObjectMapper objectMapper; public ProductEditor (ObjectMapper objectMapper) {this.objectMapper = objectMapper; } @Orride public void setAsText (String text) az IllegalArgumentException {if (StringUtils.isEmpty (text)) {setValue (null); } else {Product prod = new Product (); próbáld ki az {prod = objectMapper.readValue (text, Product.class); } catch (JsonProcessingException e) {dobja be az új IllegalArgumentException (e) -t; } setValue (prod); }}}

Ezután kössük a JSON paramétert egy objektumhoz Termék osztály:

@GetMapping ("/ get2") @ResponseBody public Product get2Product (@RequestParam Product product) {// egyedi logika visszatérési termék; }

Végül hozzá kell adnunk a puzzle utolsó hiányzó darabját. Nézzük Regisztráció ProductEditor tavaszi vezérlőnkben:

@InitBinder public void initBinder (WebDataBinder iratgyűjtő) {binder.registerCustomEditor (Product.class, új ProductEditor (objectMapper)); }

Ne feledje meg kell URL-kódolni a JSON paramétert a biztonságos szállítás érdekében.

Tehát ahelyett, hogy:

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

Küldnünk kell:

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

5. Következtetés

Összefoglalva, láttuk, hogyan kell együttműködni a JSON-nal a tavaszi MVC-ben. Útközben bemutattuk, hogyan lehet a JSON paramétereket elküldeni a POST és a GET kérésekben.

Mint mindig, a példák teljes forráskódja elérhető a GitHubon.