Tavaszi JSON-P Jacksonnal
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 TopMost 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 FOLYAMATOT1. Á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ó