springMVC produces和ajax accept参数的配合使用
来源:互联网 发布:h3c 添加免认证mac 编辑:程序博客网 时间:2024/06/07 17:06
我的风格就是 列出例子,不过多的讲理论。
一切从一个普通的前端ajax请求jspringMVC后端的例子开始,
前端jQuery ajax 请求:
后端 springMVC代码以上的代码是没有问题的,请求后会直接alert一个js对象。这是因为ajax请求dataType值为json,jquery就会把后端返回的json字符串尝试通过JSON.parse()尝试解析为js对象。
http协议response返回值无论是json字符串还是普通text文本还是html文本,本质上讲,http response响应体就是文本内容。
而 jquery ajax 根据datatype来解析返回的文本,
简单讲datatype=‘text’时,jquery直接返回字符串。
当datatype=‘json’时,jquery会调用JSON.parse()解析字符串为js对象并且返回。
当datatype=‘html’时,jquery会在把html插入dom之前执行字符串包含的js代码。
看完ajax后台我们再看下springmvc后台,@responseBody的作用是方法返回的数据不经过视图解析,直接把map写到response响应体中。
@requesMapping的作用是通过其所带的value、method等值来决定是否处理该请求。
如以上
- @RequestMapping(value = "findScore", method = RequestMethod.POST, produces = "application/json")
来,跑个例子。修改下上面的ajax请求
- $.ajax({
- url: getAbsoluteUrl('score/findScore'),
- headers: {
Accept: "text/plain; charset=utf-8"
}, - type: 'POST',
- dataType: 'json', //第1处
- success: function (res) {
- alert(res);
- },
- error: function (msg) {
- alert(msg);
- }
- });
在Prototyp(1.5)的Ajax代码封装中,将Accept默认设置为“text/javascript, text/html, application/xml, text/xml, */*”。这是因为Ajax默认获取服务器返回的Json数据模式。所以设置headers,强行制定ajax请求头 accept为“text/plain”。
结果,后端的方法都没进入,直接tomcat返回406错误。
结果和意义:
在普通的web项目中,前后端沟通很方便,甚至前后端是一个人在开发。这样produces = "application/json"就没有意义。
只有当在开发数据接口时,特别是调用方和开发方距离很远时,通过request请求accept和produces = "application/json"的配合,
能很好的限定数据的格式,确保万无一失。
有任何错误或疑问,请留言。
参考资料:
http://www.studyofnet.com/news/166.html
http://blog.csdn.net/lzwglory/article/details/17252099
- springMVC produces和ajax accept参数的配合使用
- 使用ajax和springMVC传递复杂参数
- springMvc返回乱码的 设置produces解决方案
- SpringMVC 设置produces决定返回的数据格式
- SpringMVC的注解和jQuery的配合使用
- 使用注解springmvc配合jsp/ajax/json,实现简单的jsp遍历后台数据
- springMVC produces属性含义
- springMVC中,出现中文乱码的解决办法produces
- 用Ajax配合Restull实现SpringMVC的文件上传
- CDI系列学习--produces动态注入注解的使用和讲解
- bootstrap-typeahead的ajax配合使用
- Java自定义注解 和 springMVC拦截器 配合使用记录系统操作日志的案例
- produces在@requestMapping中的使用方式和作用
- produces在@requestMapping中的使用方式和作用
- 关于accept和getpeername的address_len参数的问题
- 使用Ajax和Jquery配合数据库实现下拉框的二级联动
- 写接口时关于@Produces,@XmlRootElement的使用
- @RequestMapping的produces属性
- 指针空间的申请与释放
- JAVA字符串格式化-String.format()的使用
- 可变参数、自动装箱与自动拆箱
- RxJava 详解
- 【划分数】系列问题
- springMVC produces和ajax accept参数的配合使用
- redis 安装及简单入门
- PlayerPrefs存储数据在本地的存储位置
- POJ3087
- LeetCode题解(Week 3):445. Add Two Numbers II
- Exploring Pyramids UVALive
- Strorm学习05--DRPC实时请求应答服务
- Android Things:外设I/O接口-GPIO
- 洛谷P1355 神秘大三角