SpringMVC实现AJax以及RestFull风格
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的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风格的更多相关文章
- SpringMVC与Ajax交互
1 springmvc和ajax的交互 1.1 请求字符串响应json 客户端发送的数据:key=value&key1=value1 响应回来:json 1.1.1json的支持jar包 1 ...
- springMvc 使用ajax上传文件,返回获取的文件数据 附Struts2文件上传
总结一下 springMvc使用ajax文件上传 首先说明一下,以下代码所解决的问题 :前端通过input file 标签获取文件,通过ajax与后端交互,后端获取文件,读取excel文件内容,返回e ...
- cxf和spring结合,发布restFull风格的服务
rest(Representational State Transfer):表现层状态转化,它是一种风格,用于资源定位,例如:http://ip:port/user/student/001 和资源操作 ...
- 8.springMVC中的RESTful架构风格
RESTful架构:是一种设计的风格,并不是标准,只是提供了一组设计原则和约束条件,也是目前比较流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越多网站的采用. 关于 ...
- SpringMVC——对Ajax的处理(包含 JSON 类型)
一.首先要搞明白的一些事情. 1.从客户端来看,需要搞明白: (1)要发送什么样格式的 JSON 数据才能被服务器端的 SpringMVC 很便捷的处理,怎么才能让我们写更少的代码,如何做好 JSON ...
- springMVC+jsp+ajax上传文件
工作中遇到的小问题,做个笔记 实现springMVC + jsp + ajax 上传文件 HTML <body> <form id="myform" method ...
- 本文使用springMVC和ajax,实现将JSON对象返回到页面
一.引言 本文使用springMVC和ajax做的一个小小的demo,实现将JSON对象返回到页面,没有什么技术含量,纯粹是因为最近项目中引入了springMVC框架. 二.入门例子 ①. 建立工程, ...
- 让python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE等请求
这两天在用python的bottle框架开发后台管理系统,接口约定使用RESTful风格请求,前端使用jquery ajax与接口进行交互,使用POST与GET请求时都正常,而Request Meth ...
- springmvc的ajax返回406问题
在springmvc中ajax请求写为XXX.html,如果在controller的如:@RequestMapping(value="/login/doLogin.html",pr ...
随机推荐
- iOS面试题--Model层--沙盒的目录结构是怎么样的?各自一般用于什么场合?
沙盒的目录结构是怎么样的?各自一般用于什么场合? 一.iOS沙盒机制 iOS的应用只能访问为该应用创建的区域,不可访问其他区域,应用的其他非代码文件都存在此目录下,包括图片,属性文件plist,bun ...
- linux/unix下telnet提示Escape character is '^]'的意义
在linux/unix下使用telnet hostname port连接上主机后会提示Escape character is '^]' 这个提示的意思是按Ctrl + ] 会呼出telnet的命令行, ...
- 事务处理笔记《一》ADO.NET级别的事务
现在我们对事务的概念和原理都有所了解了,并且作为已经有一些基础的C#开发者,我们已经熟知编写数据库交互程序的一些要点,即: (1)使用SqlConnection类的对象的Open()方法建立与数据库服 ...
- 微信小程序网络请求的setDate
我感觉这个无比的奇葩..... 因为之前react的时候,我习惯在请求成功的时候直接this.setDate.........但是,在微信小程序中,一定要将this换成一个变量...一定要!!!否则会 ...
- 【转】在服务器上排除问题的头五分钟&常用命令
转自:https://blog.csdn.net/l821133235/article/details/80103106(在服务器上排除问题的头五分钟) 遇到服务器故障,问题出现的原因很少可以一下就想 ...
- delphi局域网Ping各主机方法及设置本地ip方法
1. 首先引用winsock单元 function PingHost(HostIP: String): Boolean; type PIPOptionInformation=^TIPOptionInf ...
- Python3.6全栈开发实例[010]
10.有字符串 "k:1|k1:2|k2:3|k3:4" 处理成字典 {'k':1,'k1':2....} s = "k:1|k1:2|k2:3|k3:4" d ...
- 我的Android进阶之旅------>Android使用cmd窗口进行adb logcat时出现中文乱码问题的解决办法
今天用CMD命令进行adb logcat时显示一堆的乱码,乱码如下: C:\Users\Administrator>adb logcat -s logcat --------- beginnin ...
- exist & in
select a.* from A a where exists ( select 1 from B b where a.id=b.id ) public List exist(){ List res ...
- git读取配置文件的顺序
a.查找系统配置文件: /etc/gitconfig 文件,该文件含有系统里每位用户及他们所拥有的仓库的配置值 b.查找用户配置文件: ~/.gitconfig 文件 或者 ~/.config/ ...