SpringBoot多跨域請求的支持(JSONP)

 

在咱們作項目的過程當中,有可能會遇到跨域請求,因此須要咱們本身組裝支持跨域請求的JSONP數據,而在4.1版本之後的SpringMVC中,爲咱們提供了一個AbstractJsonpResponseBodyAdvice的類用來支持jsonp的數據(SpringBoot接收解析web請求是依賴於SpringMVC實現的)。下面咱們就看一下怎麼用AbstractJsonpResponseBodyAdvice來支持跨域請求。javascript

使用AbstractJsonpResponseBodyAdvice來支持跨域請求很簡單,只須要繼承這個類就能夠了。具體代碼以下:html

 

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");  
    }  
}  

 

下面咱們寫個類來測試一下:java

 

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的時候,結果以下:jquery

 


當咱們發送的請求爲:http://localhost:8003/jsonp/testJsonp?callback=callback的時候,結果以下所示:web

看到區別了嗎?當咱們在請求參數中添加callback參數的時候,返回的數據就是jsonp的,當咱們請求參數中不帶callback的時候,返回的數據是json的。能夠讓咱們方便的靈活運用。下面再奉上一個jsonp的完整案例。ajax

前臺頁面:spring

 

 
<%@ 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:json

 

 
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請求這個按鈕的時候,效果以下:springboot

咱們成功的實現了一個跨越的請求。更詳細的請求信息以下:




參考:http://blog.csdn.net/zknxx/article/details/53443181

相關文章
相關標籤/搜索