Spring mvc 实现jsonp和json数据类型
@ControllerAdvice
public class JsonpSupportAdvice extends AbstractJsonpResponseBodyAdvice {
public JsonpSupportAdvice() {
//参数包含callback的时候 使用jsonp的反馈形式
super("callback");
}
}
别忘记添加注解@ControllerAdvice,只需要上面几行代码,springmvc就会为我们所有的json类型的请求提供jsonp数据的支持,只需要在请求的时候携带callback参数,springmv就会返回jsonp类型数据,如果没有callback参数,springmv会返回正常的json数据。控制器的原有方法不做任何修改,也无需添加任何配置,轻松支持jsonp请求。
前端js ajax请求只需要改变 dataType:"jsonp",就可以了,其它的和之前的写法是一样的
js代码如下:
 $.ajax({
//          url:"http://localhost:8081/rest/itemcat/list?callback=getMessage",
            url:"http://localhost:8081/children-watch-web-api/config/list",
            type:"get",
            cache:false,
            dataType:"jsonp",
            //jsonp:"callback", //这里定义了callback的参数名称,以便服务获取callback的函数名即getMessage
            //jsonpCallback:"getMessage", //这里定义了jsonp的回调函数         //如果不加回掉函数方法,jquery会自动加上
            success:function(data){
                //
                var dataList = eval(data.list);
                var html = "";
                for(var i = 0;i < dataList.length; i++){
                    html += dataList[i].deviceId+"<br>";
                }
                $("#myDiv").html(html);
            },
            error:function(){
                alert("发生异常");
            }
     });  
jsonp请求接口:

返回代码示例:
/**/jQuery16108674314118078539_1515552287922({"list":[{"id":7,"deviceId":"7503276720","createDate":1514273113000}}],"code":0,"msg":"success"});
本域名访问接口:

返回代码示例:
{"list":[{"id":7,"deviceId":"7503276720","createDate":1514273113000}}],"code":0,"msg":"success"}
callback 函数是一种以参数形式传递给另一个函数的函数。
可以看到,jsonp返回的是一个方法,方法里面是json数据,而本域名访问就是返回的json数据,所以jsonp,就是通过方法回调来传输跨域数据的.
我是分割线
之前的只能get访问
现在我们要用post访问,结果出现头信息只能本域名访问,
Access-Control-Allow-Origin: http://localhost:8081/
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: FooBar
Content-Type: text/html; charset=utf-8
所以我们需要拦截访问的请求,
我们顶一个拦截器:
@Component
public class CorsFilter implements Filter { @Override
public void init(FilterConfig filterConfig) throws ServletException { }
@Override
public void doFilter(ServletRequest servletRequest,ServletResponse servletResponse, FilterChain filterChain)throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) servletResponse;
//String origin = (String) servletRequest.getRemoteHost() + ":"+ servletRequest.getRemotePort();
//构造头部信息
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods","POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers","x-requested-with,Authorization");
response.setHeader("Access-Control-Allow-Credentials", "true");
filterChain.doFilter(servletRequest, servletResponse);
} @Override
public void destroy() { }
通过代码我们可以看到,现在允许所有的访问请求。
web.xml添加filter,有多个filter就添加到第一个filter中。
<!-- 跨域配置-->
<filter>
<filter-name>cors</filter-name>
<filter-class>com.config.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cors</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
现在就可以用json一样访问接口了

Spring mvc 实现jsonp和json数据类型的更多相关文章
- Spring MVC 3.0 返回JSON数据的方法
		
Spring MVC 3.0 返回JSON数据的方法1. 直接 PrintWriter 输出2. 使用 JSP 视图3. 使用Spring内置的支持// Spring MVC 配置<bean c ...
 - Spring MVC 学习总结(九)——Spring MVC实现RESTful与JSON(Spring MVC为前端提供服务)
		
很多时候前端都需要调用后台服务实现交互功能,常见的数据交换格式多是JSON或XML,这里主要讲解Spring MVC为前端提供JSON格式的数据并实现与前台交互.RESTful则是一种软件架构风格.设 ...
 - spring mvc 406 (Not Acceptable) json转换错误
		
spring mvc通过@RequestMapping("/register")和@ResponseBody返回json格式的字符串时出现如下异常: The resource id ...
 - Spring mvc下Ajax获取JSON对象问题 406错误
		
spring 通过@ResponseBody标签返回JSON数据的方法都报406错: Failed to load resource: the server responded with a stat ...
 - 基于注解的spring mvc 中使用 ajax json 的model
		
在 Spring mvc3中,响应.接受 JSON都十分方便. 使用注解@ResponseBody可以将结果(一个包含字符串和JavaBean的Map),转换成JSON. 使用 @RequestBod ...
 - Spring MVC灵活控制返回json的值(自定义过滤字段)
		
在使用spring MVC开发过程中,为了提高项目执行效率,所以在一些外键字段的实体中会注解”@ManyToOne(fetch = FetchType.LAZY)”以实现延迟加载的效果. 但是,在使用 ...
 - Spring MVC同一方法返回JSON/XML格式
		
最近一道面试题,要求同一API接口支持不同格式返回值.一开始是设想通过过滤器(Filter)设置返回值,但是并不可行,因为方法返回值一般都是类型需要做转换,而过滤器则是前置的.另一方面可以通过拦截器的 ...
 - Spring mvc 下Ajax获取JSON对象问题 406错误
		
我在学习springmvc过程中(我的项目是配置的后缀是.html),从controller返回对象. 如果我不使用 mvc-annotation-driver,而是手动配置,AnnotationMe ...
 - spring mvc将对象转换为json返回的配置
		
之前在spring 3中用的好好的MappingJacksonHttpMessageConverter转换器,将对象转为json响应给浏览器,在spring4中,报错. Cannot create i ...
 
随机推荐
- 第九课: - 导出到CSV / EXCEL / TXT
			
第 9 课 将数据从microdost sql数据库导出到cvs,excel和txt文件. In [1]: # Import libraries import pandas as pd import ...
 - WEB笔记-1、HTML 标记与文档结构
			
1.HTML 标记与文档结构 1.1 块级(block)和行内(inline)标签 块级标签 <h1>-<h6> : 6级标签,h1表示最重要(h1 不仅仅是最大最突出 ...
 - Java代码运用及算法思路养成——用*号输出形状
			
简单的了解了一些循环算法后,尝试用循环算法,输出形状图形 例1矩形与平行四边形的比较(可以看做矩形的每一行在输出前都输出了矩形长度数量-1的空格数量并且依次递减) 例2三角形(三角形可看做半个矩形,考 ...
 - 逐步理解Java中的线程安全问题
			
什么是Java的线程安全问题? 线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读/写完,其他线程才可使用.不会出现数据不一致或者数据 ...
 - css3 y轴翻转效果
			
这个小例子是hover的时候可一看到div沿着y轴转动一圈 思路:css写好动画transiton: all 1s; hover的时候给他一个状态transform:rotateY(180deg); ...
 - 自定义View实现圆角化
			
目的: 1.实现自定义ReleativeLayout圆角化 实现: 1.在res目录中新建attrs.xml文件,自定义属性如下. <?xml version="1.0" e ...
 - 安装和启动Elasticseach
			
1.在windows上安装和启动Elasticseach 1.安装JDK,至少1.8.0_73以上版本,java -version2.下载和解压缩Elasticsearch安装包.Elasticsea ...
 - C++进阶 STL(3) 第三天  函数对象适配器、常用遍历算法、常用排序算法、常用算数生成算法、常用集合算法、 distance_逆序遍历_修改容器元素
			
01昨天课程回顾 02函数对象适配器 函数适配器是用来让一个函数对象表现出另外一种类型的函数对象的特征.因为,许多情况下,我们所持有的函数对象或普通函数的参数个数或是返回值类型并不是我们想要的,这时候 ...
 - Guava 是个风火轮之基础工具 (1)
			
转自:http://www.jamespan.me/blog/2015/02/08/guava-basic-utilities-1/ Guava 是个风火轮之基础工具 (1) 前言 Guava 是 J ...
 - js 操作table: insertRow(),deleteRow(),insertCell(),deleteCell()方法
			
表格有几行: var trCnt = table.rows.length; (table为Id ) 每行有几列:for (var i=0; i<trCnt; i++) ...