application/x-www-form-urlencoded與application/json的區別

第一,請求參數與後臺接收參數不一致;java

application/x-www-form-urlencoded:瀏覽器默認請求,數據是jquery的Ajax請求的默認方式,這種方式的好處是瀏覽器都支持,在請求過程當中會對數據進行序列化,以鍵值對的形式k1=v1&k2=v2jquery

application/json:是以json字符串的格式請求ajax

 

第2、請求參數類型與後臺接收參數類型不一致;spring

application/x-www-form-urlencoded:能夠使用springMVC默認的自定義參數接收,也能夠經過@requestParam()註解接收,或者對象接收json

application/json:只能以@requestBody註解接收對象,可是springMVC中用@requestBody以後就不能接收單個參數了瀏覽器

舉例格式一:前臺用ajax 以application/json格式請求app

 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接收post

@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格式請求類型(默認的)ui

<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接收:url

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

相關文章
相關標籤/搜索