简单记录下@RequestBody(关于它和@RequestParam接收数据方式的拓展)

内容参考自博客:https://blog.csdn.net/ff906317011/article/details/78552426

 

这个标注是用来注释controller中的请求方法中的参数的,那么什么时候要用这个注解呢?

主要看请求的方式和请求header的编码方式:

1.请求方式为get/post时,根据request header Content-Type的值来判断:

  如果Content-Type是application/x-www-form-urlencoded的话,可以选择用这个注解,但这种情况用@ReauestParam也能处理

    (不过似乎如果上传的是Content-Type是application/x-www-form-urlencoded的json数据的话,可以用@RequestParam 的 Map型数据来接~)

  如果是multipart/form-data,这个注解不能处理

  如果是像application/json, application/xml其他格式,则必须使用这个注解来处理!(可以直接把传过来的json数据绑定到对象参数中去)

2.请求方式为put时,根据request header Content-Type的值来判断:

  如果Content-Type是application/x-www-form-urlencoded的话,必须用这个注解来处理

  如果是multipart/form-data,不能处理

  如果是像application/json, application/xml其他格式,必须用这个注解来处理

 

注意!这个RequestBody接收的是json字符串!一般建议如果是表单的提交,后台可以用对象来收,RequestBody会自动转换,并且前端要

JSON.stringify(from)

,然后记得改header为json!

 

看个例子。首先是用@requestParam:

前端:

$.ajax({
            url: productBase.baseUrl + "/saveProductbaseEdition",
            type: "POST",
            data: {userId:getCookie(appCommon.personid)},
              //data:'{"userId":"getCookie(appCommon.personid)"}',//传个使用者的id过去
            success: function (data) {
                console.log(data);
                if (data.code == '0') {
                    layerTips.msg("归档成功!");
                    productBase.refresh();
                } else {
                    layerTips.msg("归档失败!")
                
                }
            }
  });

那个getCookie是一个id,然后后端:

@ApiOperation(value="基地数据信息归档操作", notes="基地数据信息归档操作")
    @PostMapping("/saveProductbaseEdition")
    public R saveEdition(@RequestParam Map<String, Object> map) {
        System.out.println("##########test  "+map.get("userId"));
        //productBaseService.saveEdition();
        return R.ok();
}

用一个map来接收,成功收到对象。

这里这个data不是json的意思,应该是Ajax这个参数的一种形式 ,然后它会自动帮你转换成正确的形式传过去。

 

 

然后是用@RequestBody来接收json,由于这个注解要求传过来的是json字符串,一开始不知道,也是这样写,然后一直报错说什么不能识别,

 

 

后来写了个实验来证明这个确实是要字符串的json:

 前端:

 

$.ajax({
            url: productBase.baseUrl + "/saveProductbaseEdition",
            type: "POST",
            //data: {userId:getCookie(appCommon.personid)},
              data:'{"userId":"getCookie(appCommon.personid)"}',//传个使用者的id过去
            headers : {  
                'Content-Type' : 'application/json;charset=utf-8'  
            },
            success: function (data) {
                console.log(data);
                if (data.code == '0') {
                    layerTips.msg("归档成功!");
                    productBase.refresh();
                } else {
                    layerTips.msg("归档失败!")
                
                }
            }
        });
        layer.close(index);
    });

 

后端:

@ApiOperation(value="基地数据信息归档操作", notes="基地数据信息归档操作")
    @PostMapping("/saveProductbaseEdition")
    public R saveEdition(@RequestBody Map<String, Object> map) {
        System.out.println("##########test  "+map.get("userId"));
        //productBaseService.saveEdition();
        return R.ok();
}

可以看到前端加了head的说明,然后这里的json是全字符串,所以拿到的是:

 

 

不过这里也发现,如果直接传一个值过去,好像也可以……

前端:

$.ajax({
            url: productBase.baseUrl + "/saveProductbaseEdition",
            type: "POST",
            //data: {userId:getCookie(appCommon.personid)},
              data: getCookie(appCommon.personid),//传个使用者的id过去
            headers : {  
                'Content-Type' : 'application/json;charset=utf-8'  
            },
            success: function (data) {
                console.log(data);
                if (data.code == '0') {
                    layerTips.msg("归档成功!");
                    productBase.refresh();
                } else {
                    layerTips.msg("归档失败!")
                
                }
            }
 });

后端:

@ApiOperation(value="基地数据信息归档操作", notes="基地数据信息归档操作")
    @PostMapping("/saveProductbaseEdition")
    public R saveEdition(@RequestBody String id) {
        System.out.println("##########test  "+id);
        //productBaseService.saveEdition();
        return R.ok();
}

然后后面直接用个String类型的值来接,也拿到了数据~

 

更多细节到参考博客:https://blog.csdn.net/ff906317011/article/details/78552426上去了解!

posted @ 2018-03-29 21:35  汪神  阅读(1824)  评论(0)    收藏  举报