Tavaszi JSON-P Jacksonnal

REST felső

Most jelentettem be az újat Tanulj tavaszt tanfolyam, amelynek középpontjában az 5. tavasz és a tavaszi bakancs 2 alapjai állnak:

>> ELLENŐRIZZE A FOLYAMATOT Jackson Top

Most jelentettem be az újat Tanulj tavaszt tanfolyam, amelynek középpontjában az 5. tavasz és a tavaszi bakancs 2 alapjai állnak:

>> ELLENŐRIZZE A FOLYAMATOT

1. Áttekintés

Ha bármit fejlesztett az interneten, tisztában van vele azonos származási politikai korlát böngészők rendelkeznek az AJAX kérések kezelésével. A megkötés egyszerű áttekintése az, hogy minden más tartományból, sémából vagy portból származó kérés nem engedélyezett.

Ennek egyik módja enyhítse ezt a böngésző korlátozást amikor JSON-adatokkal dolgozik - a JSON-t párnázással (JSON-P) használja.

Ez a cikk megvitatja Spring támogatását a JSON-P adatok kezeléséhez - a AbstractJsonpResponseBodyAdvice.

2. A JSON-P működés közben

Az azonos származási politikát nem terhelik a tag, amely lehetővé teszi a szkriptek különböző tartományokba történő betöltését. A JSON-P technika ezt kihasználja azzal, hogy a JSON választ átadja a javascript függvény argumentumának.

2.1. Készítmény

Példáinkban ezt az egyszerűt fogjuk használni Vállalat osztály:

nyilvános osztály Társaság {private long id; privát karakterlánc neve; // szabványos beállítók és szerelők} 

Ez az osztály megköti a kérés paramétereit, és a szerverről JSON reprezentációként küldi vissza.

A Controller módszer szintén egyszerű megvalósítás - a Vállalat példa:

@RestController public class CompanyController {@RequestMapping (value = "/ companyRest", tuottaa = MediaType.APPLICATION_JSON_VALUE) public Company getCompanyRest () {Company company = new Company (1, "Xpto"); visszatérő társaság; }}

A kliens oldalon használhatjuk jQuery könyvtár AJAX-kérelem létrehozásához és küldéséhez:

$ .ajax ({url: '// localhost: 8080 / spring-mvc-java / companyRest', adatok: {format: 'json'}, típus: 'GET', ...});

Vegyünk egy AJAX-kérést a következő URL-re:

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

A kiszolgáló válasza a következő lenne:

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

Mivel a kérelmet ugyanazon séma, tartomány és port ellen küldték, a válasz nem lesz blokkolva, és a böngésző engedélyezi a JSON-adatokat.

2.2. Kereszt származási kérelem

A kérés URL-jének megváltoztatásával:

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

a választ a böngésző blokkolja a kérés küldése miatt helyi kiszolgáló nak nek 127.0.0.1 amely más területnek tekintendő és azonos származási politika megsértését jelenti.

A JSON-P segítségével visszahívási paramétert adhatunk a kéréshez:

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

A kliens oldalon olyan egyszerű, mint a következő paraméterek hozzáadása az AJAX kéréshez:

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

A getCompanyData lesz a válasz fogadásakor meghívott függvény.

Ha a szerver a következőképpen formázza a választ:

getCompanyData ({"id": 1, "név": "Xpto"}); 

a böngészők nem blokkolják, mivel a választ a kliens és a szerver között egyeztetett és egyeztetett szkriptként kezeli az illesztés miatt getCompanyData mind a kérelemben, mind a válaszban.

3. @ControllerAdvice Megjegyzés

A bab a jelöléssel @ControllerAdvice képesek a vezérlők egészének vagy egy meghatározott részhalmazának segítségére, és a különböző vezérlők között megosztott keresztmetszeti viselkedés beágyazására szolgál. A tipikus használati minták a kivételkezeléshez, attribútumok hozzáadásához a modellekhez vagy a kötőanyagok regisztrálásához kapcsolódnak.

A tavasztól kezdve 4.1, @ControllerAdvice képes regisztrálni a ResponseBodyAdvice interfész, amely lehetővé teszi a válasz megváltoztatását, miután azt egy vezérlő módszerrel visszaküldték, de mielőtt egy megfelelő átalakító megírta volna.

4. A válasz módosítása a használatával AbstractJsonpResponseBodyAdvice

Szintén a 4.1 tavasszal kezdődik, most hozzáférünk a AbstractJsonpResponseBodyAdvice osztály - amely a választ a JSON-P szabványok szerint formázza.

Ez a szakasz elmagyarázza, hogyan lehet az alaposztályt játékba hozni, és hogyan lehet megváltoztatni a választ anélkül, hogy bármilyen változtatást kellene végrehajtani a meglévő vezérlőkön.

A JSON-P tavaszi támogatásának engedélyezéséhez kezdjük a konfigurációval:

@ControllerAdvice nyilvános osztály A JsonpControllerAdvice kiterjeszti az AbstractJsonpResponseBodyAdvice {public JsonpControllerAdvice () {super ("visszahívás"); }} 

A támogatás a AbstractJsonpResponseBodyAdvice osztály. A szuper módszer által továbbított kulcs az, amelyet a JSON-P adatokat kérő URL-ben fogunk használni.

Ezzel a vezérlőtanáccsal automatikusan átalakítjuk a választ JSON-P-re.

5. JSON-P tavasszal a gyakorlatban

A korábban tárgyalt konfigurációval a REST alkalmazásokat a JSON-P segítségével reagálni tudjuk. A következő példában a vállalat adatait adjuk vissza, így az AJAX kérés URL-jének valami ilyennek kell lennie:

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

Az előző konfiguráció eredményeként a válasz a következőképpen fog kinézni:

getCompanyData ({"id": 1, "név": "Xpto"});

Amint megbeszéltük, az ebben a formátumban adott válasz nem lesz blokkolva annak ellenére, hogy egy másik domainről származik.

A JsonpControllerAdvice könnyen alkalmazható minden olyan módszerre, amely a -vel kommentált választ adja vissza @ResponseBody és ResponseEntity.

A visszahívásban át kell adnia egy azonos nevű függvényt, getCompanyData, az összes válasz kezelésére.

6. Következtetés

Ez a rövid cikk bemutatja, hogy a válasz formázásának amúgy is fárasztó munkája, hogy kihasználják a JSON-P előnyeit, hogyan egyszerűsödik a 4.1 tavaszi új funkció használatával.

A példák és a kódrészletek megvalósítása megtalálható ebben a GitHub projektben.

REST alsó

Most jelentettem be az újat Tanulj tavaszt tanfolyam, amelynek középpontjában az 5. tavasz és a tavaszi bakancs 2 alapjai állnak:

>> ELLENŐRIZZE A FOLYAMATOT Jackson alsó

Most jelentettem be az újat Tanulj tavaszt tanfolyam, amelynek középpontjában az 5. tavasz és a tavaszi bakancs 2 alapjai állnak:

>> ELLENŐRIZZE A FOLYAMATOT