application/x-www-form-urlencoded与application/json的区别
第一,请求参数与后台接收参数不一致;
application/x-www-form-urlencoded:浏览器默认请求,数据是jquery的Ajax请求的默认方式,这种方式的好处是浏览器都支持,在请求过程中会对数据进行序列化,以键值对的形式k1=v1&k2=v2
application/json:是以json字符串的格式请求
第二、请求参数类型与后台接收参数类型不一致;
application/x-www-form-urlencoded:可以使用springMVC默认的自定义参数接收,也可以通过@requestParam()注解接收,或者对象接收
application/json:只能以@requestBody注解接收对象,但是springMVC中用@requestBody之后就不能接收单个参数了
举例格式一:前台用ajax 以application/json格式请求
1 $(function(){ 2 $("#searchBtn").click(function(){ 3 var data = { 4 keyWord: $('#keyWord').val(), 5 isAvailable: $('#isAvailable').val(), 6 begin: $('#begin').val(), 7 end: $('#end').val() 8 }; 9 console.log(typeof data) 10 console.log(typeof JSON.stringify(data)) 11 $.ajax({ 12 type:'post', 13 url:'http://localhost:8081/admin/ucenter/member/1/3', 14 data:JSON.stringify(data), 15 contentType: 'application/json', //请求的数据类型 16 dataType: 'json', //返回的数据类型 17 success: function(result){ 18 console.log(result) 19 } 20 }) 21 }) 22 })
后台java接收
@requestMapping("admin/ucenter/member/{page}/{limit}") public R pageList(@PathVariable Long page, @PathVariable Long limit, @RequestBody(required = false) QueryMember searchObject){ Page<Member> pageParam = new Page<>(page,limit); iMemberService.pageList(pageParam, searchObject); List<Member> records = pageParam.getRecords(); long total = pageParam.getTotal(); return R.ok().data("total",total).data("row",records); }
举例格式二:前台用ajax 以application/x-www-form-urlencoded格式请求类型(默认的)
<script> $(function(){ $("#searchBtn").click(function(){ var data = { keyWord: $('#keyWord').val(), isAvailable: $('#isAvailable').val(), begin: $('#begin').val(), end: $('#end').val() }; console.log(typeof data) console.log(typeof JSON.stringify(data)) $.ajax({ type:'post', url:'http://localhost:8081/admin/ucenter/member/1/3', data: data, //键值对 //contentType:'application/json',//请求的数据类型 dataType: 'json', //返回的数据类型 success: function(result){ console.log(result) } }) }) }) </script>
后台java接收:
@requestMapping("admin/ucenter/member/{page}/{limit}") public R pageList(@PathVariable Long page, @PathVariable Long limit, QueryMember searchObject){ Page<Member> pageParam = new Page<>(page,limit); iMemberService.pageList(pageParam, searchObject); List<Member> records = pageParam.getRecords(); long total = pageParam.getTotal(); return R.ok().data("total",total).data("row",records); }
注意事项:不能用@requestParam注解接收对象类型,可以接收单个属性的,并且如果对象中有Date日期类型的数据,不加注解也接收不过
可以将日期类型转为String或者添加上日期注解@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")