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 {@Autowiredprivate 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的完整案例。
前台页面:
<%@ 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请求" οnclick="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:
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多跨域请求的支持(JSONP)相关推荐
- 使用YQL解决跨域请求json转jsonp问题
一.跨域报错 首先,是跨域请求的问题,jQuery默认不支持跨域请求,报错如下: index.html:1 XMLHttpRequest cannot load http://www.weather. ...
- springboot +element-axios跨域请求
1.初始化element项目 1.1:vue init webpage '项目名称' 1.2:npm i element-ui -S 1.3:在main.js添加 import ElementUI f ...
- 跨域请求(使用jsonp实现跨域请求)百度地图api证逆地址解析获取周边信息(pois)
新手程序员,新手博客,如果那里写的不好,还请大神们补充,指错 最近项目里面需要做一个电子围栏的功能,我这边做的就是需要把商户的地址的经纬度存进数据库,本来这些从百度地图API里面有Demo可以看,但是 ...
- SpringBoot允许跨域请求
在前后端分离的架构中,允许跨域请求是一个很重要的设置.SpringBoot项目中允许跨域请求比较简单,只需要我们定义好配置类即可. 在com.example.csdn.config包里面创建CorsC ...
- SpringBoot 处理跨域请求
一.背景 最开始项目计划的是通过Nginx进行转发,且配置了跨域请求.后来又改变了部署方式,所以得通过项目自身来进行一下跨域处理. 1)何为跨域? URL的一般格式: 协议 + 域名(子域名 + 主域 ...
- Js跨域请求jquery的jsonp方式
JSONP: 由于同源策略,一般来说位于 server1.example.com 的网页与不是 server1.example.com 的服务器沟通,而 HTML 的 <script> 元 ...
- jsonp跨域原理_【网站技术解读①】Javascript实现跨域请求
推荐一个读者做的不错的编程学习网站: 网站:潜安 域名:http://www.qianani.com 另外将会不定期推送近期网站用到的一些技术,讲一些核心原理,今天为第一篇 问题由来: 最近一直在优化 ...
- Jsonp 跨域请求实例
Jsonp 跨域请求实例 关于jsonp的一个实例,其实自己也不是很了解,今天下午稍微研究了一下: 简单来说,jsonp就是为了两个不同网站之间数据传递而产生的,主要用于js脚本,因为浏览器本身是禁止 ...
- Web跨域请求及其解决方案
目录 一.理论概述 1. 什么是跨域请求(Cross-domain Request) 2. 浏览器的同源策略(Same-origin Policy) 3. 存在的安全风险 4. CSRF攻击简介 二. ...
- 前端跨域请求get_HTTP--跨域真的有这么难吗
前言 以前写前端小项目的时候就听说过跨域这个词,什么 JSONP啊,CORS啊.感觉很高级,但是无奈项目太小没机会用上.今天就写篇博客总结一下常用的跨域操作. 为什么要跨域 一般来说写项目的时候都是自 ...
最新文章
- Android与JS混编(js调用android相机扫描二维码)
- Early Z Culling
- SqlServer_Case_When用法
- 2022年美国大学生数学建模竞赛各题型常见参考代码汇总
- 「Apollo」Cyber RT 学习笔记
- php预处理查询数据库,php+mysqli使用预处理技术进行数据库查询的方法
- iOS-应用生命周期
- 330 div+css Experience
- Java IO之File类详解
- python dtype o_python – 为什么dtype = str的空数据框填充“n”?
- CSS:布局——伸缩布局flex
- 关于VS编译的程序内存分配只能用1.5~2G上限的优化方案
- 前端计算机英语单词,解决文件命名,变量命名头皮发麻,单词超多1700个前端专属单词,css常用命名单词【起名字太烦了全背下来内卷吧小伙伴大前端时代来临了】
- WPS2005中实现多行合一(转)
- android 蒙版图片带拖动_使用jQuery draggable在div剪切蒙版中拖动缩放图像?
- android系统密码设置功能,手机锁屏设置!安卓手机锁屏密码设置技巧?
- hdu 4438 Hunters
- 计算机启动后没有桌面,电脑开机后桌面上什么都没有是为什么,怎么办
- 原生JS购物车---cookie应用
- Spring Security实现用户名密码验证的原理