Jarná JSON-P s Jacksonom

ODPOČINOK Najlepšie

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ Jackson Top

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ

1. Prehľad

Ak ste vyvíjali niečo na webe, ste si vedomí obmedzenie politiky rovnakého pôvodu prehľadávače majú pri vybavovaní požiadaviek AJAX. Jednoduchý prehľad obmedzenia je, že akákoľvek požiadavka pochádzajúca z inej domény, schémy alebo portu nebude povolená.

Jedným zo spôsobov, ako zmierniť toto obmedzenie prehľadávača pri práci s údajmi JSON - je použitie JSON s výplňou (JSON-P).

Tento článok pojednáva o jarnej podpore práce s údajmi JSON-P - pomocou AbstractJsonpResponseBodyAdvice.

2. JSON-P v akcii

Politika rovnakého pôvodu nie je vnucovaná EÚ značka umožňujúca načítanie skriptov naprieč rôznymi doménami. Technika JSON-P to využíva tak, že odovzdáva odpoveď JSON ako argument funkcie javascript.

2.1. Príprava

V našich príkladoch použijeme toto jednoduché Spoločnosť trieda:

public class Company {private long id; súkromné ​​meno reťazca; // štandardní zakladatelia a obstarávatelia} 

Táto trieda zaviaže parametre požiadavky a zo servera sa vráti ako reprezentácia JSON.

Kontrolórska metóda je tiež jednoduchá implementácia - vrátenie Spoločnosť inštancia:

@RestController verejná trieda CompanyController {@RequestMapping (value = "/ companyRest", produce = MediaType.APPLICATION_JSON_VALUE) verejná spoločnosť getCompanyRest () {spoločnosť spoločnosť = nová spoločnosť (1, "Xpto"); návratová spoločnosť; }}

Na strane klienta môžeme použiť jQuery knižnica na vytvorenie a odoslanie žiadosti AJAX:

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

Zvážte požiadavku AJAX na nasledujúcej adrese URL:

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

Odpoveď zo strany servera by bola nasledovná:

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

Pretože žiadosť bola odoslaná proti rovnakej schéme, doméne a portu, odpoveď sa nezablokuje a prehliadač povolí údaje JSON.

2.2. Žiadosť o krížový pôvod

Zmenou adresy URL žiadosti na:

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

prehliadač zablokuje odpoveď z dôvodu odoslania žiadosti od používateľa localhost do 127.0.0.1 ktorá sa považuje za inú doménu a predstavuje porušenie politiky rovnakého pôvodu.

Pomocou JSON-P sme schopní do žiadosti pridať parameter spätného volania:

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

Na strane klienta je to také ľahké ako pridať nasledujúce parametre k požiadavke AJAX:

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

The getCompanyData bude funkcia volaná po prijatí odpovede.

Ak server naformátuje odpoveď takto:

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

prehľadávače ju nebudú blokovať, pretože s odpoveďou sa bude zaobchádzať ako so skriptom dohodnutým a dohodnutým medzi klientom a serverom z dôvodu zhody getCompanyData v žiadosti aj v odpovedi.

3. @ControllerAdvice Anotácia

Fazuľa s poznámkami @ControllerAdvice sú schopné pomôcť všetkým alebo konkrétnej podskupine ovládačov a používajú sa na zapuzdrenie prierezového správania zdieľaného medzi rôznymi ovládačmi. Typické vzory používania súvisia so spracovaním výnimiek, pridaním atribútov k modelom alebo registráciou viazačov.

Počnúc jarom 4.1, @ControllerAdvice je schopný registrovať implementácie ResponseBodyAdvice rozhranie, ktoré umožňuje zmenu odpovede po jej vrátení metódou radiča, ale predtým ako je zapísaná vhodným prevodníkom.

4. Zmena odpovede pomocou AbstractJsonpResponseBodyAdvice

Tiež od jari 4.1, teraz máme prístup k AbstractJsonpResponseBodyAdvice trieda - ktorá formátuje odpoveď podľa štandardov JSON-P.

Táto časť vysvetľuje, ako uviesť základnú triedu do hry a zmeniť reakciu bez vykonania akýchkoľvek zmien v existujúcich radičoch.

Aby sme mohli povoliť jarnú podporu pre JSON-P, začnime s konfiguráciou:

@ControllerAdvice verejná trieda JsonpControllerAdvice rozširuje AbstractJsonpResponseBodyAdvice {public JsonpControllerAdvice () {super ("callback"); }} 

Podpora sa vykonáva pomocou AbstractJsonpResponseBodyAdvice trieda. Kľúč odovzdaný super metóde je ten, ktorý sa použije v adrese URL vyžadujúcej údaje JSON-P.

S touto radou radiča automaticky konvertujeme odpoveď na JSON-P.

5. JSON-P S jarou v praxi

S predtým diskutovanou konfiguráciou na mieste sme schopní dosiahnuť, aby naše REST aplikácie reagovali pomocou JSON-P. V nasledujúcom príklade vrátime údaje spoločnosti, takže naša adresa URL žiadosti o AJAX by mala byť asi takáto:

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

V dôsledku predchádzajúcej konfigurácie bude odpoveď vyzerať takto:

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

Ako už bolo spomenuté, odpoveď v tomto formáte nebude blokovaná napriek tomu, že pochádza z inej domény.

The JsonpControllerAdvice možno ľahko použiť na akúkoľvek metódu, ktorá vráti odpoveď anotovanú pomocou @ResponseBody a ResponseEntity.

Pri spätnom volaní by mala existovať funkcia s rovnakým názvom, getCompanyData, za vybavenie všetkých odpovedí.

6. Záver

Tento rýchly článok ukazuje, ako sa inak zdĺhavá práca pri formátovaní odpovede na využitie výhod JSON-P zjednodušuje pomocou novej funkcie na jar 4.1.

Implementáciu príkladov a útržkov kódu nájdete v tomto projekte GitHub.

REST spodok

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ Jackson spodok

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ

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