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

在我們做項目的過程中,有可能會遇到跨域請求,所以需要我們自己組裝支持跨域請求的JSONP數據,而在4.1版本以後的SpringMVC中,為我們提供了一個AbstractJsonpResponseBodyAdvice的類用來支持jsonp的數據(SpringBoot接收解析web請求是依賴於SpringMVC實現的)。下面我們就看一下怎麼用AbstractJsonpResponseBodyAdvice來支持跨域請求。

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

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

下面我們寫個類來測試一下:

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

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

當我們發送的請求為:http://localhost:8003/jsonp/testJsonp?callback=callback的時候,結果如下所示:

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

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

前臺頁面:

 
 
 
 Title 
   
 
 
 
  
 
 

後臺代碼1:

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

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

當我們點擊測試jsopn請求這個按鈕的時候,效果如下:

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

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

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


分享到:


相關文章: