在我們做項目的過程中,有可能會遇到跨域請求,所以需要我們自己組裝支持跨域請求的jsonp數據,而在4.1版本以后的springmvc中,為我們提供了一個abstractjsonpresponsebodyadvice的類用來支持jsonp的數據(springboot接收解析web請求是依賴于springmvc實現的)。下面我們就看一下怎么用abstractjsonpresponsebodyadvice來支持跨域請求。
使用abstractjsonpresponsebodyadvice來支持跨域請求很簡單,只需要繼承這個類就可以了。具體代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package com.zkn.learnspringboot.config; import org.springframework.web.bind.annotation.controlleradvice; import org.springframework.web.servlet.mvc.method.annotation.abstractjsonpresponsebodyadvice; /** * created by wb-zhangkenan on 2016/12/1. */ @controlleradvice (basepackages = "com.zkn.learnspringboot.web.controller" ) public class jsonpadvice extends abstractjsonpresponsebodyadvice{ public jsonpadvice() { super ( "callback" , "jsonp" ); } } |
下面我們寫個類來測試一下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package com.zkn.learnspringboot.web.controller; import com.zkn.learnspringboot.domain.persondomain; import org.springframework.beans.factory.annotation.autowired; import org.springframework.http.mediatype; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.restcontroller; /** * created by wb-zhangkenan on 2016/12/1. */ @restcontroller @requestmapping ( "/jsonp" ) public class jsonptestcontroller { @autowired private persondomain persondomain; @requestmapping (value = "/testjsonp" ,produces = mediatype.application_json_value) public persondomain testjsonp(){ return persondomain; } } |
當我們發送請求為:http://localhost:8003/jsonp/testjsonp的時候,結果如下:
當我們發送的請求為:http://localhost:8003/jsonp/testjsonp?callback=callback的時候,結果如下所示:
看到區別了嗎?當我們在請求參數中添加callback參數的時候,返回的數據就是jsonp的,當我們請求參數中不帶callback的時候,返回的數據是json的。可以讓我們方便的靈活運用。下面再奉上一個jsonp的完整案例。
前臺頁面:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<%@ page contenttype= "text/html;charset=utf-8" language= "java" %> <html> <head> <title>title</title> <script src= "resources/js/jquery-2.1.4.min.js" type= "text/javascript" ></script> </head> <body> <input type= "button" value= "測試jsonp請求" onclick= "testjsonp()" /> <script type= "text/javascript" > function testjsonp() { $.ajax({ type: 'get' , url: 'http://localhost:8003/jsonp/testjsonp' , datatype: 'jsonp' , jsonp: "callback" , success:function (data) { alert(data.username+ " " +data.password); }, error:function (err) { alert( '出現錯誤了!!!' ); } }); } </script> </body> </html> |
后臺代碼1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
package com.zkn.learnspringmvc.news.controller; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.requestmapping; /** * created by zkn on 2016/12/3. */ @controller public class jsonptestcontroller { @requestmapping ( "testjsonp" ) public string testjsonp(){ return "jsonp" ; } } |
下面我們發送請求如下:http://localhost:8080/learnspringmvc/testjsonp
當我們點擊測試jsopn請求這個按鈕的時候,效果如下:
我們成功的實現了一個跨越的請求。更詳細的請求信息如下:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:http://blog.csdn.net/zknxx/article/details/53443181