Proljetni JSON-P s Jacksonom

OSTALO Vrh

Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:

>> PROVJERITE TEČAJ Jackson Top

Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:

>> PROVJERITE TEČAJ

1. Pregled

Ako ste nešto razvijali na webu, svjesni ste toga ograničenje politike istog podrijetla preglednici imaju kada se bave AJAX zahtjevima. Jednostavan pregled ograničenja je da bilo koji zahtjev koji potječe iz druge domene, sheme ili porta neće biti dopušten.

Jedan od načina da opustite ovo ograničenje preglednika kada radite s JSON podacima - je pomoću JSON-a s popunjavanjem (JSON-P).

Ovaj članak govori o Springovoj podršci za rad s JSON-P podacima - uz pomoć SažetakJsonpResponseBodyAdvice.

2. JSON-P u akciji

Politika istog podrijetla nije nametnuta za tag, omogućujući učitavanje skripti na različitim domenama. JSON-P tehnika to koristi, prosljeđujući JSON odgovor kao argument funkcije javascript.

2.1. Priprema

U našim ćemo primjerima koristiti ovo jednostavno Društvo razred:

javna klasa tvrtka {private long id; privatni naziv niza; // standardni postavljači i dobivači} 

Ova će klasa vezati parametre zahtjeva i vratit će se s poslužitelja kao JSON predstavljanje.

Metoda kontrolera je također jednostavna implementacija - vraćanje datoteke Društvo primjer:

@RestController javna klasa CompanyController {@RequestMapping (value = "/ companyRest", produce = MediaType.APPLICATION_JSON_VALUE) javno poduzeće getCompanyRest () {Company company = novo poduzeće (1, "Xpto"); tvrtka za povratak; }}

Na strani klijenta možemo koristiti jQuery knjižnica za stvaranje i slanje AJAX zahtjeva:

$ .ajax ({url: '// localhost: 8080 / spring-mvc-java / companyRest', podaci: {format: 'json'}, tip: 'GET', ...});

Razmotrite AJAX zahtjev za sljedeći URL:

// localhost: 8080 / spring-mvc-java / companyRest 

Odgovor poslužitelja bio bi sljedeći:

{"id": 1, "name": "Xpto"}

Kako je zahtjev poslan prema istoj shemi, domeni i priključku, odgovor se neće blokirati, a preglednik će dopustiti JSON podatke.

2.2. Zahtjev za višestruko podrijetlo

Promjenom URL-a zahtjeva u:

//127.0.0.1:8080/spring-mvc-java/companyRest 

preglednik će blokirati odgovor zbog zahtjeva koji se šalje iz lokalnihost do 127.0.0.1 koja se smatra drugom domenom i predstavlja kršenje pravila istog podrijetla.

S JSON-P zahtjevu možemo dodati parametar povratnog poziva:

//127.1.1.1:8080/spring-mvc-java/companyRest?callback=getCompanyData 

Na klijentskoj strani lako je dodati AJAX zahtjevu sljedeće parametre:

$ .ajax ({... jsonpCallback: 'getCompanyData', dataType: 'jsonp', ...});

The getCompanyData bit će funkcija koja se poziva kada se primi odgovor.

Ako poslužitelj oblikuje odgovor na sljedeći način:

getCompanyData ({"id": 1, "name": "Xpto"}); 

preglednici ga neće blokirati jer će odgovor tretirati kao skriptu dogovorenu i dogovorenu između klijenta i poslužitelja zbog podudaranja getCompanyData i u zahtjevu i u odgovoru.

3. @ControllerAdvice Bilješka

Grah s bilješkama @ControllerAdvice su u mogućnosti pomoći svim ili određenom podskupu kontrolera i koristi se za inkapsuliranje unakrsnog ponašanja koje dijele različiti kontroleri. Tipični obrasci upotrebe povezani su s rukovanjem iznimkama, dodavanjem atributa modelima ili registracijom veziva.

Počevši od proljeća 4.1, @ControllerAdvice je u mogućnosti registrirati implementacije ResponseBodyAdvice sučelje koje omogućuje promjenu odgovora nakon što je vraćen metodom kontrolera, ali prije nego što ga napiše odgovarajući pretvarač.

4. Promjena odgovora pomoću SažetakJsonpResponseBodyAdvice

Također počevši od proljeća 4.1, sada imamo pristup SažetakJsonpResponseBodyAdvice klasa - koja formatira odgovor prema JSON-P standardima.

Ovaj odjeljak objašnjava kako uključiti osnovnu klasu i promijeniti odgovor bez ikakvih promjena na postojećim kontrolerima.

Da bismo omogućili proljetnu podršku za JSON-P, krenimo s konfiguracijom:

@ControllerAdvice javna klasa JsonpControllerAdvice proširuje AbstractJsonpResponseBodyAdvice {public JsonpControllerAdvice () {super ("callback"); }} 

Podrška se izrađuje pomoću SažetakJsonpResponseBodyAdvice razred. Ključ prosljeđen super metodi je onaj koji će se koristiti u URL-u koji zahtijeva JSON-P podatke.

Uz ovaj savjet za kontroler, automatski pretvaramo odgovor u JSON-P.

5. JSON-P s proljećem u praksi

S postavljenom prethodno raspravljenom konfiguracijom, možemo omogućiti da naše REST aplikacije reagiraju s JSON-P. U sljedećem ćemo primjeru vratiti podatke tvrtke, pa bi naš URL zahtjeva za AJAX trebao biti otprilike ovako:

//127.0.0.1:8080/spring-mvc-java/companyRest?callback=getCompanyData 

Kao rezultat prethodne konfiguracije, odgovor će izgledati kako slijedi:

getCompanyData ({"id": 1, "name": "Xpto"});

Kao što je već rečeno, odgovor u ovom formatu neće se blokirati unatoč tome što potječe s druge domene.

The JsonpControllerAdvice lako se može primijeniti na bilo koju metodu koja vraća odgovor označen s @ResponseBody i ResponseEntity.

U povratnom pozivu trebala bi biti dodana funkcija s istim imenom, getCompanyData, za rukovanje svim odgovorima.

6. Zaključak

Ovaj kratki članak pokazuje kako je inače dosadan posao formatiranja odgovora kako bi se iskoristilo JSON-P pojednostavljeno korištenjem nove funkcije u proljeće 4.1.

Implementacija primjera i isječci koda mogu se naći u ovom GitHub projektu.

OSTALO dno

Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:

>> PROVJERITE TEČAJ Jackson dno

Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:

>> PROVJERITE TEČAJ