当前位置:首页 > Web开发 > 正文

success: function (data) {if (!data.success) {return;}var ph

2024-03-31 Web开发

参考网上队友的帖子:通报JSON数据有没有须要用RequestBody?https://www.cnblogs.com/NJM-F/p/10407763.html

 

1.不使用RequestBody时是这样的:

前端参数可以直接使用JSON东西:

//此时请求的ContentType默认是application/x-www-form-urlencoded: var user= { "username" : username, "password" : password, "rememberMe":rememberMe }; $.ajax({ url : "http://...../jsontest.do", type : "POST", async : true, data : user, dataType : ‘json‘, success : function(data) { } });

后端参数的可以用java东西接收,也可以用数据类型单独接收:

@RequestMapping("/jsontest.do") public void test(User user,String username,String password,Boolean rememberMe){ System.out.println(user); System.out.println("username: " + username); System.out.println("password: " + password); System.out.println("rememberMe: " + rememberMe); }

2.而使用RequestBody是这样的:

参考:https://blog.csdn.net/walkerJong/article/details/7520896

感化:

i) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的东西上;

ii) 再把HttpMessageConverter返回的东西数据绑定到 controller中要领的参数上。

使用时机:

A) GET、POST方法提时, 按照request header Content-Type的值来判断:

application/x-www-form-urlencoded, 可选(即非必需,因为这种情况的数据@RequestParam, @ModelAttribute也可以措置惩罚惩罚,固然@RequestBody也能措置惩罚惩罚);
    multipart/form-data, 不能措置惩罚惩罚(即使用@RequestBody不能措置惩罚惩罚这种格局的数据);
    其他格局, 必需(其他格局包孕application/json, application/xml等。这些格局的数据,必需使用@RequestBody来措置惩罚惩罚);
B) PUT方法提交时, 按照request header Content-Type的值来判断:

application/x-www-form-urlencoded, 必需;
    multipart/form-data, 不能措置惩罚惩罚;
    其他格局, 必需;
说明:request的body部分的数据编码格局由header部分的Content-Type指定;


前端使用application/json的时候,必需要将JSON东西转换为JSON字符串

//需要使用JSON.stringify()将JSON东西转化为JSON字符串 var user= { "username" : username, "password" : password }; $.ajax({ url : "http://...../jsontest.do", type : "POST", async : true, contentType: "application/json; charset=utf-8",//将JSON东西转换为JSON字符串 data : JSON.stringify(user), dataType : ‘json‘, success : function(data) { } });

  

后端参数要用@RequestBody注解加java东西/map东西/字符串 接收,如果请求的地点后面有参数,则形参可以新增该参数的接收:

//这种方法下所有的参数都只能封装在User东西中,不能单独设置参数 @RequestMapping("/jsontest") //用java东西接收 public void test(@RequestBody User user ){ String username = user.getUsername(); String password = user.getPassword(); } 或者 @RequestMapping("/jsontest") //用map东西接收,再从map东西中按照key值获取value值 public void test(@RequestBody Map map ){ String username = map.get("username").toString(); String password = map.get("password").toString(); } 或者 public void test(@RequestBody String jsonData) { //用字符串接收,再将字符串转为json东西,最后再解析为具体的东西 JSONObject jsonObject = JSON.parseObject(jsonData); String username= jsonObject.getString("username"); String username= jsonObject.getString("password"); }

第1种有以下长处: 
1.前端通报数据不用转换为json字符串:即不用JSON.stringify(user) 
2.后端接受的参数很灵活,即可以封装为User东西,,亦可以使用单个参数username,rememberMe,甚至User东西和单个rememberMe参数混合使用都可以

第2种长处:

1.前端ajax请求传入对照庞大的数据格局时,用@RequestBody注解对照好(小我私家理解)

2.使用@RequestBody时,在ajax请求的地点后边也可以加上参数,然后在后台的controller参数中获取

例如

{
var
params = { id:id, taskPhones:taskPhones, groupId:groupId, planType:planType, scheduledTimeStr:scheduledTimeStr, taskName:taskName, templateContent:templateContent, templateId:templateId, taskTemplateValueList:taskTemplateValueList, smilResourceId:smilResourceId, } submit(params, ‘0‘); } function submit(params,isTemp){ $.ajax({ url: WEB_ROOT + "/mall/task/saveTaskForEdit?isTemp="+isTemp, type : "POST", dataType : "JSON", contentType:"application/json", data: JSON.stringify(params), success: function (data) { if (data.success) { var taskId=data.data; msgInfoModal("告成",‘生存告成‘,function () { window.location = WEB_ROOT + "/mall/task/taskIndex"; // window.location = WEB_ROOT + "/mall/task/editTask?id=" + taskId; },true); tab.alertReload(‘告成‘,‘生存告成‘,false,"toEdit("+demandId+")"); } else { msgInfoModal("掉败",data.msg); } } }); }

[email protected]的用法

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30615.html