JSON-parametere med fjær-MVC

1. Oversikt

I denne korte opplæringen skal vi se nærmere på hvordan vi kan jobbe med JSON-parametere i Spring MVC.

Først begynner vi med litt bakgrunn om JSON-parametere. Deretter går vi ned i kaninhullet for å se hvordan du sender JSON-parametere i POST- og GET-forespørsler.

2. JSON-parametere i vår-MVC

Å bruke JSON til å sende eller motta data er en vanlig praksis blant webutviklere. Den hierarkiske strukturen til JSON-strengene gir en mer kompakt og lesbar måte å representere parametere for HTTP-forespørsel på.

Som standard gir Spring MVC out-of-the-box databinding for enkle datatyper som String. For det formålet bruker den en liste over innebygde eiendomsredaktører under panseret.

Imidlertid kan det være lurt å binde mer komplekse datatyper i prosjekter fra den virkelige verden. For eksempel kan det være nyttig å kunne kartlegge en JSON-parameter i et modellobjekt.

3. Send JSON-data i POST

Spring gir en enkel måte å sende JSON-data via POST-forespørsler. Den innebygde @Fotball kommentar kan automatisk deserialisere JSON-dataene som er innkapslet i forespørselslegemet, til et bestemt modellobjekt.

Generelt trenger vi ikke å analysere anmodningsorganet selv. Vi kan bruke Jackson-biblioteket til å gjøre alle tunge løft for oss.

La oss nå se hvordan du sender JSON-data via en POST-forespørsel i Spring MVC.

For det første må vi lage et modellobjekt for å representere de passerte JSON-dataene. Tenk for eksempel på Produkt klasse:

offentlig klasse Produkt {privat int id; privat strengnavn; privat dobbel pris; // standardkonstruktør + getters + setters}

For det andre, la oss definere en Spring handler-metode som godtar POST-forespørsler:

@PostMapping ("/ create") @ResponseBody public Product createProduct (@RequestBody Product product) {// tilpasset logisk returprodukt; }

Som vi kan se, kommentere produkt argument med @Fotball er nok til å binde JSON-dataene som sendes fra klientene.

Nå kan vi teste vår POST-forespørsel ved hjelp av cURL:

krøll -i \ -H "Godta: applikasjon / json" \ -H "Innholdstype: applikasjon / json" \ -X POST --data \ '{"id": 1, "name": "Asus Zenbook", "pris": 800} '"// localhost: 8080 / spring-mvc-basics-4 / products / create"

4. Send JSON Parameter i GET

Våren MVC tilbyr @RequestParam for å trekke ut søkeparametere fra GET-forespørsler. Imidlertid, i motsetning til @RequestBody, de @RequestParam kommentar støtter bare enkle datatyper som int og String.

Så for å sende JSON, må vi definere JSON-parameteren vår som en enkel streng.

Det store spørsmålet her er: Hvordan konverterer vi JSON-parameteren vår (som er en String) til et objekt av Produkt klasse?

Svaret er ganske enkelt! De ObjectMapper klasse levert av Jackson-biblioteket tilbyr en fleksibel måte å konvertere JSON-strenger til Java-objekter.

La oss nå se hvordan du sender en JSON-parameter via en GET-forespørsel i Spring MVC. Først må vi lage en annen behandlingsmetode i kontrolleren vår for å håndtere GET-forespørsler:

@GetMapping ("/ get") @ResponseBody public Product getProduct (@RequestParam String product) kaster JsonMappingException, JsonProcessingException {Produkt prod = objectMapper.readValue (produkt, Product.class); retur prod; }

Som vist ovenfor, readValue () metoden tillater deserialisering av JSON-parameteren produkt direkte inn i en forekomst av Produkt klasse.

Merk at vi definerer vår JSON-søkeparameter som en String gjenstand. Nå, hva om vi vil passere en Produkt objekt som vi gjorde når vi brukte @Fotball?

For å svare på dette spørsmålet, tilbyr Spring en kortfattet og fleksibel løsning gjennom tilpassede eiendomsredaktører.

Først, vi må lage en egendefinert eiendomseditor for å innkapsle logikken for å konvertere JSON-parameteren gitt som en String til en Produkt gjenstand:

offentlig klasse ProductEditor utvider PropertyEditorSupport {private ObjectMapper objectMapper; public ProductEditor (ObjectMapper objectMapper) {this.objectMapper = objectMapper; } @ Override public void setAsText (String text) kaster IllegalArgumentException {if (StringUtils.isEmpty (text)) {setValue (null); } annet {Produkt prod = nytt produkt (); prøv {prod = objectMapper.readValue (tekst, Product.class); } catch (JsonProcessingException e) {throw new IllegalArgumentException (e); } setValue (prod); }}}

La oss deretter binde JSON-parameteren til et objekt fra Produkt klasse:

@GetMapping ("/ get2") @ResponseBody offentlig produkt get2Product (@RequestParam produktprodukt) {// tilpasset logisk returprodukt; }

Til slutt må vi legge til den siste manglende biten i puslespillet. La oss registrere ProductEditor i vår kontroller:

@InitBinder offentlig ugyldig initBinder (WebDataBinder bindemiddel) {binder.registerCustomEditor (Product.class, ny ProductEditor (objectMapper)); }

Husk det Vi må URL-kode JSON-parameteren for å sikre sikker transport.

Så i stedet for:

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

Vi må sende:

GET / vår-mvc-grunnleggende-4 / produkter / get2? Produkt =% 7B% 22id% 22% 3A% 201% 2C% 22navn% 22% 3A% 20% 22Asus% 20 Zenbook% 22% 2C% 22 pris% 22% 3A % 20800% 7D

5. Konklusjon

For å oppsummere så vi hvordan vi kunne jobbe med JSON i Spring MVC. Underveis viste vi hvordan du sender JSON-parametere i POST- og GET-forespørsler.

Som alltid er hele kildekoden til eksemplene tilgjengelig på GitHub.


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