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. 1501: 货币系统(money)

    1501: 货币系统(money) 时间限制: 1 Sec  内存限制: 64 MB 提交: 33  解决: 12 [提交][状态][讨论版] 题目描述 母牛们不但创建了它们自己的政府,而且选择建立了 ...

  2. urllib -- ProxyHandler处理器(代理设置)

    import urllib.requestimport randomimport ssl proxy_list = [ {"https" : "196.61.27.58: ...

  3. Unity3d 重力感应

    Input.acceleration 加速度 最近一次测量的设备在三维空间中的线性加速度(只读); void Update () { v3=Input.acceleration; } void OnG ...

  4. [Spring Data Repositories]学习笔记--为repository添加通用的方法

    如果想把一个方法加到所有的repository中,用前一篇提到的方法就不合适了. 英文原版,请看 http://docs.spring.io/spring-data/data-mongo/docs/1 ...

  5. 【BZOJ2005】[Noi2010]能量采集 欧拉函数

    [BZOJ2005][Noi2010]能量采集 Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把 ...

  6. jQuery之获取checkbox选中的值

    <mce:script src="jquery.js" mce_src="jquery.js"></mce:script><!-- ...

  7. RocketMq的安装使用

    RocketMq的安装使用 .一.预备环境 1.系统 Windows 2. 环境 JDK1.8.Maven.Git 1.下载 1.1地址:http://rocketmq.apache.org/rele ...

  8. websocket集群情况下Nginx 代理出现的坑

    那么问题的背景: A想给B发送socket 消息 ! A这消息 这时候被Nginx 轮询发到了C 服务器上! 擦!   这时候就蛋疼了!   要接收消息那个人在B服务器上!     B就这样苦逼的收不 ...

  9. 斯坦福大学Andrew Ng - 机器学习笔记(2) -- 逻辑回归 & 正则化

    大概用了一个月,Andrew Ng老师的机器学习视频断断续续看完了,以下是个人学习笔记,入门级别,权当总结.笔记难免有遗漏和误解,欢迎讨论. 鸣谢:中国海洋大学黄海广博士提供课程视频和个人笔记,在此深 ...

  10. HDU1950-Bridging signals-最长上升子序列

    Description 'Oh no, they've done it again', cries the chief designer at the Waferland chip factory. ...