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")

posted @ 2020-05-21 17:55  苦瓜先森  阅读(1727)  评论(1编辑  收藏  举报