RestFull风格就是url路径中不能出现?不能带参数,如https://www.baidu.com/user/item/1234这个格式,也叫url资源定位

1、需要在web.xml中开启put,和delete的支持

  <!-- 浏览器不支持put,delete等method,由该filter将/xxx?_method=delete转换为标准的http delete方法 -->
<filter>
<filter-name>hiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

  2、务必导入jackson的jar包

3、jqery发送AJax到springmvc,需要的是json标准格式的字符串,而非json对象,所以得先转成字符串,涉及的发送AJax的几处坑如下:

SpringMVC发送ajax

一般采用$.ajax()方法进行数据发送,主要是因为$.post()方法发送数据的形式得是json对象格式,而$.ajax()方法可以发送字符串形式json,,另外使用springmvc的ajax功能千万记得导入jackson的2.4版本以上的包,不然报406的错误,采用$.ajax()方法需要注意的几个坑是:

$.ajax({

url: "${pageContext.request.contextPath}/test.action",

data:  JSON.stringify(obj), //这也是一处坑,SpringMVC要求为严格形式的json字符串,必须保证json串不能出现畸形

contentType : 'application/json;charset=utf-8',//这也是一处坑,这里指定发送到服务器端的报文内容形式,默认的urlencoder的,无法传送json,所以传json时必须指定contentType

type:"post",

traditional:true,

dataType:"json",  //这里是一处坑,dataType为指定响应回来的数据类型,必须是xml,json,text,html中的一种,不能写错,写错后会造成jqery框架把返回数据转为指定格式失败,而从导致success函数无法调用,但是服务端能接收到数据,也能正常返回,而js端解析数据出错而造成卡死了,但是并没有错误显示

success:function(data)

{

}

});

服务端把json数据装配成pojo对象,是通过@RequestBody注解来实现的,而把pojo对象返回成json对象是通过注解@ResponseBody来实现的,都得一一写上,就算返回的是字符串@ResponseBody也不能漏掉

@RequestMapping("/test.action")

public @ResponseBody User func1(@RequestBody User u)

{

return User;

}

其中,发送AJax的contentType 为发送过去的格式,dataType为接收时让jqery转换的格式,一定得指定让其可以正常转换的格式才行,不然不会报错,但是也没有成功的回调响应

JQuery的$.ajax(url,[settings]) 
1.默认的ContentType的值为:application/x-www-form-urlencoded; charset=UTF-8 
此格式为表单提交格式,数据为key1=value1&key2=value2的格式 
2.虽然ajax的data属性值格式为:{key1:value1,key2:value2},但最后会转为key1=value1&key2=value2的格式提交到后台 
3.如果ajax要和springmvc交互,key1=value1&key2=value2的格式,后台springmvc只需要定义对象或者参数就行了,会自动映射。 
4.如果springmvc的参数有@RequestBody注解(接收json**字符串**格式数据),ajax必须将date属性值转为json字符串,不能为json对象(js对象,会自动转为key=value形式)。并且,修改contentType的值为:application/json; charset=UTF-8,这样加了@RequestBody注解的属性才能自定映射到值

4、代码实现:

①、服务端,默认可以不写produces={"application/json;charset=utf-8"},produces是指定响应回客户端的json格式编码,除非返回格式解析乱码:

    @RequestMapping(value="/submit",method=RequestMethod.DELETE,produces={"application/json;charset=utf-8"})
public @ResponseBody User submit1(@RequestBody User u)
{
System.out.println(u);
return new User("","jerry");
} @RequestMapping(value="/submit",method=RequestMethod.POST)
public @ResponseBody User submit2( @RequestBody User u)
{
System.out.println(u);
return new User("","jerry");
}

②、客户端:

<script type="text/javascript">
$(function() {
$("#btn1").click(function() {
var obj = {
_method:'delete',
uid : 1,
name : 'jerry1'
};
$.ajax({
url : '${pageContext.request.contextPath}/submit',
type : 'post',
data : JSON.stringify(obj),
contentType : 'application/json;charset=utf-8',
dataType : 'json',
success : function(data) {
alert(data.uid);
}
});
}); $("#btn2").click(function() {
var obj = {
// _method:'post',
uid : 2,
name : 'jerry2'
};
$.ajax({
url : '${pageContext.request.contextPath}/submit',
type : 'post',
data : JSON.stringify(obj),
contentType : 'application/json;charset=utf-8',
dataType : 'json',
success : function(data) {
alert(data.uid);
}
});
});
});
</script>

  客户端通过数据参数区分RestFull方法,服务端通过RequestMethod来进行限制,url路径参数可以通过路径匹配注解来获取,以{}包裹具体参数,如下:

jquery发送json数据到controller,ajax上必须制定contentType : 'application/json;charset=utf-8',且controller接受的时候必须用@RequestBody进行对象接受,如果@RequestBody,那么默认是已form表单提交,ajax发送时就不能加contentType : 'application/json;charset=utf-8',采用默认的urlendongding形式就行

SpringMVC实现AJax以及RestFull风格的更多相关文章

  1. SpringMVC与Ajax交互

    1 springmvc和ajax的交互 1.1  请求字符串响应json 客户端发送的数据:key=value&key1=value1 响应回来:json 1.1.1json的支持jar包 1 ...

  2. springMvc 使用ajax上传文件,返回获取的文件数据 附Struts2文件上传

    总结一下 springMvc使用ajax文件上传 首先说明一下,以下代码所解决的问题 :前端通过input file 标签获取文件,通过ajax与后端交互,后端获取文件,读取excel文件内容,返回e ...

  3. cxf和spring结合,发布restFull风格的服务

    rest(Representational State Transfer):表现层状态转化,它是一种风格,用于资源定位,例如:http://ip:port/user/student/001 和资源操作 ...

  4. 8.springMVC中的RESTful架构风格

    RESTful架构:是一种设计的风格,并不是标准,只是提供了一组设计原则和约束条件,也是目前比较流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越多网站的采用. 关于 ...

  5. SpringMVC——对Ajax的处理(包含 JSON 类型)

    一.首先要搞明白的一些事情. 1.从客户端来看,需要搞明白: (1)要发送什么样格式的 JSON 数据才能被服务器端的 SpringMVC 很便捷的处理,怎么才能让我们写更少的代码,如何做好 JSON ...

  6. springMVC+jsp+ajax上传文件

    工作中遇到的小问题,做个笔记 实现springMVC + jsp + ajax 上传文件 HTML <body> <form id="myform" method ...

  7. 本文使用springMVC和ajax,实现将JSON对象返回到页面

    一.引言 本文使用springMVC和ajax做的一个小小的demo,实现将JSON对象返回到页面,没有什么技术含量,纯粹是因为最近项目中引入了springMVC框架. 二.入门例子 ①. 建立工程, ...

  8. 让python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE等请求

    这两天在用python的bottle框架开发后台管理系统,接口约定使用RESTful风格请求,前端使用jquery ajax与接口进行交互,使用POST与GET请求时都正常,而Request Meth ...

  9. springmvc的ajax返回406问题

    在springmvc中ajax请求写为XXX.html,如果在controller的如:@RequestMapping(value="/login/doLogin.html",pr ...

随机推荐

  1. greenlet:轻量级的并发编程

    1 关于greenlet greelet指的是使用一个任务调度器和一些生成器或者协程实现协作式用户空间多线程的一种伪并发机制,即所谓的微线程. greelet机制的主要思想是:生成器函数或者协程函数中 ...

  2. cocos2d-x - android 学习(集成NDK、配置开发环境)

    先来贴上一大神的博客:日月之明 --- http://www.cnblogs.com/lhming/tag/cocs2d-x/ 需要工具和软件包:Eclipse.Android SDK.Android ...

  3. POJ1365 Prime Land【质因数分解】【素数】【水题】

    题目链接: http://poj.org/problem?id=1365 题目大意: 告诉你一个数的质因数x的全部底数pi和幂ei.输出x-1的质因数的全部底数和幂 解题思路: 这道题不难.可是题意特 ...

  4. 转:: 刺鸟:用python来开发webgame服务端(5)

    来源:http://ciniao.me/article.php?id=19 --------------- 刺鸟原创文章,转载请注明出处    在前面的文章中,我们已经开始了不少逻辑功能的开发,在这期 ...

  5. 【BZOJ3158】千钧一发 最小割

    [BZOJ3158]千钧一发 Description Input 第一行一个正整数N. 第二行共包括N个正整数,第 个正整数表示Ai. 第三行共包括N个正整数,第 个正整数表示Bi. Output 共 ...

  6. 巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

    1.编辑删除&&多对多关系的其他方法 提交,数据,得到结果 查看运行 给编辑和删除,添加样式 我们点击删除,可以成功删除 打印sql语句的,在settings.py里边的配置 LOGG ...

  7. Ubuntu16.04安装Chrome浏览器及解决root不能打开的问题

    1. 安装桌面(emmm,不知道是否只执行第二个命令就行) # apt-get install gonme# apt-get install ubuntu-desktop2. 安装Chrome浏览器 ...

  8. SaltStack远程执行命令

    编辑fansik_cmd.sls文件: 内容如下: fansik_cmd:  cmd.run:    - unless:      - test -f /tmp/fansik.txt      - t ...

  9. Django CSRF 原理分析

    原文链接: https://blog.csdn.net/u011715678/article/details/48752873 参考链接:https://blog.csdn.net/clark_fit ...

  10. PyQt4调用UI文件

    方法1,转换到py调用 指令 pyuic4 test.ui -o testUi.py 方法2.直接调用ui文件 # -*- coding: utf-8 -*- """ - ...