ajax restfull,SpringMVC实现AJax以及RestFull分格(示例代码)

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

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

hiddenHttpMethodFilter

org.springframework.web.filter.HiddenHttpMethodFilter

hiddenHttpMethodFilter

/*

2、务必导入jackson的jar包

127a62ddec794ff083c4c569c5dbaed5.jpg

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@ResponseBodyUser func1(@RequestBodyUseru)

{

returnUser;

}

其中,发送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("004","jerry");

}

@RequestMapping(value="/submit",method=RequestMethod.POST)public@ResponseBody User submit2( @RequestBody User u)

{

System.out.println(u);return new User("003","jerry");

}

②、客户端:

$(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);

}

});

});

});

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

788e7ce118b14ee593fc85d316738fb5.jpg

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值