JSONP以及Spring對象MappingJacksonValue的使用方式


 

什么是JSONP?,以及Spring對象MappingJacksonValue的使用方式


原文: https://blog.csdn.net/weixin_38111957/article/details/81842460

一,引言

最近小編在寫這樣一套服務端的代碼,說白了就是提供數據和處理一些業務邏輯。這個服務端是單獨的一個工程,提供給PC端,移動端(IOS,Android)等多個終端進行調用。在調試過程中發現這樣的一個異常,才了解到我們的JS請求是不能跨域請求的。為了考慮安全性的問題,JS只能訪問相同域名,相同端口號的地址。但是JS能跨域請求JS,正好利用了這個因素,才有了JSONP這個解決方案。錯誤提示信息如下:

Failed to load http://127.0.0.1:8081/rest/itemcat/all?callback=category.getDataService: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8082' is therefore not allowed access.

二,什么是JSONP?

JSONP其實是解決JS跨域調用數據的一種方案,JS跨域直接請求數據是不可以的,但是JS跨域請求JS腳本是可以的。可以把返回的數據封裝成一個JS腳本,把數據作為。參數傳遞到這個方法中,做一個方法的調用的js跨域請求可以得到此腳本數據,從而獲取到想要到數據。執行流程如下:

三,JSONP使用方式

那使用JSONP請求服務端,那服務端該怎么返回數據呢看如下代碼:

再給大家科普小知識:在使用RequestMapping注解的時候,也可以設置返回JSON數據的字符編碼喲!

produce = MediaType.APPLICATION_JSON_VALUE +“; charset = utf-8“

在這只提供了服務端怎么寫,具體JS怎么調用麻煩各位小伙伴自行學習下,因為調用是前端工程師寫的,沒源碼給我,如果有小伙伴實在沒找到,那就在評論區留言,小編回頭找前端工程師要要哈哈!

  1. @RequestMapping(value = "/itemcat/all" ,produces = MediaType.APPLICATION_JSON_VALUE+";charset=utf-8")
  2. @ResponseBody
  3. public Object getItemCatList(String callback){
  4. //需要返回的數據
  5. CatResult itemCat = itemCatService.getItemCat();
  6.  
  7. //callback 這個是js調用時傳過來的參數,內容就是回調的方法名
  8.  
  9. //第一種方式 ,把我們返回的數據轉JSON后,然后拼接我們在js中定義的方法名,把json數據作為參數傳遞進去
  10. //返回 String
  11. /*String jsonStr = JsonUtils.objectToJson(itemCat);
  12. return callback + "("+jsonStr+");";*/
  13.  
  14. //第二種方式,使用Spring自帶對象,前提是需要在Srping4.0的版本才有的喲。
  15. //返回 Object
  16. MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(itemCat);
  17. mappingJacksonValue.setJsonpFunction(callback);
  18. return mappingJacksonValue;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM