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.