求助! 为什么前台转换的json对象到后台接收不到参数

ManbaBryant 2019-08-22 09:53:47
前台

$("#inboundButton").click(function(){
var tr = $("#product_table tr"); // 获取table中每一行内容
var result = []; // 数组
for (var i = 0; i < tr.length; i++) {// 遍历表格中每一行的内容
var tds = $(tr[i]).find("td");
if (tds.length > 0) {
result.push({
"inboundName" : $(tds[0]).find("input").val(),
"inboundCost" : $(tds[1]).find("input").val(),
"inboundSize" : $(tds[2]).find("input").val(),
"inboundTotal" : $(tds[3]).find("input").val()
})
}
}
// json数据
var jsonData = {
"inventoryList" : result
};
var inventoryData=JSON.stringify(jsonData);
console.log(inventoryData);

$.ajax({
type : "POST",
url : "${APP_PATH}/inbound/addInbound.do",
contentType : "application/json;charset=UTF-8",
data : inventoryData,
success : function(data) {
alert("inbound-success");
},
error:function(result){
alert("inbound-fail");
}
})
})

控制台打印

{"inventoryList":[{"inboundName":"a","inboundCost":"1","inboundSize":"3","inboundTotal":"3"},{"inboundName":"b","inboundCost":"2","inboundSize":"5","inboundTotal":"10"}]}

后台

@ResponseBody
@RequestMapping(value="/addInbound",method = RequestMethod.POST)
public Msg addInbound(InboundList inboundList,HttpServletRequest request) {
System.out.println("inboundList:"+inboundList);

return Msg.success();
}

实体类

public class Inbound {
private Integer inboundId;
private String inboundName;
private float inboundCost;
private Integer inboundSize;
private float inboundTotal;
----构造器和get set方法
}
public class InboundList implements Serializable{

private static final long serialVersionUID = 1L;
private List<Inbound> inboundList;
public List<Inbound> getInboundList() {
return inboundList;
}
public void setInboundList(List<Inbound> inboundList) {
this.inboundList = inboundList;
}
@Override
public String toString() {
return "InboundList[inboundList=" +inboundList+"]";
}

}

控制台打印

inboundList:InboundList[inboundList=null]
...全文
852 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
不能留白 2019-09-06
  • 打赏
  • 举报
回复
你看我的,从页面获取账号和密码通过ajax传到后台验证,不是很简单么??? jq代码:

$("#btn_login").click(function(){
	var name=$("#text_username").val();
	var pwd=$("#text_password").val();
	$.post("login_check",{"username":name,"password":pwd},function(data){
		if(data=="success"){
			window.location.href ="home";
		}
		else {
			alert("账号或密码错误!");		
	        }
	})		
});
后台控制器接收:

@RequestMapping("/login_check")
@ResponseBody
public String login_check(User user, HttpServletRequest request) {
	User users=userserviceimpl.selectUser(user.getUsername(), user.getPassword());
	if (users==null) {
		return "fail";
	}else {
		request.getSession().setAttribute("session_user",users);//登录成功后将用户放入session中,用于拦截
		return "success";
	}
}
不能留白 2019-09-06
  • 打赏
  • 举报
回复
为什么要封装成json?? 直接用实体不就得了??
衣er衫 2019-09-04
  • 打赏
  • 举报
回复
后台接收参数加上@RequestBody
ManbaBryant 2019-09-02
  • 打赏
  • 举报
回复
引用 27 楼 往事随风逝,回首已千年 的回复:
直接发jsonDate不需要转换
引用 26 楼 weixin_42392002 的回复:
@RequestParam 是get请求,你这个是ajax,是post请求。可以直接用request.getParamer("InboundList");获取字符串,转成json数组的方式。
引用 25 楼 yanpengfeil 的回复:
var jsonData =JSON.str... 这个方法呢 单词忘了 相信你能看懂
引用 22 楼 积小流 的回复:
@RequestBody 你用的的@ResponseBody 用String inventoryData 接受 与js传参名一样 ,然后解析成json 取
引用 20 楼 cwmlow 的回复:
你的封装类里的4个属性名要跟前端传过来的json对象里的4个参数名一致 才能绑定的上 即inboundName,inboundCost,inboundSize,inboundTotal 而且你的封装类得初始化,说白了就是一个entity实体类
引用 19 楼 暴路远(nightcat) 的回复:
①contentType 设置成application/json ②Controller 的参数List 类型 前加上@RequestBody ③List引用名称和前端stringify里的一致。
改成这样就好了 这是为啥呢 前端不把数组封装成json对象

$("#inboundButton").click(function(){
			var tr = $("#product_table tr"); // 获取table中每一行内容
			var result = []; // 数组
			for (var i = 0; i < tr.length; i++) {// 遍历表格中每一行的内容
				var tds = $(tr[i]).find("td");
				if (tds.length > 0) {
					result.push({
						"inboundName" : $(tds[0]).find("input").val(),
						"inboundCost" : $(tds[1]).find("input").val(),
						"inboundSize" : $(tds[2]).find("input").val(),
						"inboundTotal" : $(tds[3]).find("input").val()
					})
				}
			}
			$.ajax({
				type : "POST",
				headers: {
					'Accept': 'application/json',
					'Content-Type': 'application/json'},
				data : JSON.stringify(result),
				dataType:"json",
				xxxxxxxxxxxx
			})					
		})
后台直接用List<>接收 不用单独封装list

@ResponseBody
	@RequestMapping(value="/addInbound",method = RequestMethod.POST)
	public Msg addInbound(@RequestBody List<Inbound> inbound,HttpServletRequest request) {
		System.out.println("inboundList:"+inbound);
		return Msg.success();	
	} 
yanpengfeil 2019-08-29
  • 打赏
  • 举报
回复
var jsonData =JSON.str... 这个方法呢 单词忘了 相信你能看懂
the God of Light 2019-08-29
  • 打赏
  • 举报
回复
你先调试下啊,不调试怎么知道问题在哪里
xiaoxiangqing 2019-08-29
  • 打赏
  • 举报
回复
前加上@RequestBody
  • 打赏
  • 举报
回复
直接发jsonDate不需要转换
weixin_42392002 2019-08-29
  • 打赏
  • 举报
回复
@RequestParam 是get请求,你这个是ajax,是post请求。可以直接用request.getParamer("InboundList");获取字符串,转成json数组的方式。
cwmlow 2019-08-28
  • 打赏
  • 举报
回复
你的封装类里的4个属性名要跟前端传过来的json对象里的4个参数名一致 才能绑定的上 即inboundName,inboundCost,inboundSize,inboundTotal 而且你的封装类得初始化,说白了就是一个entity实体类
积小流 2019-08-28
  • 打赏
  • 举报
回复
@RequestBody 你用的的@ResponseBody 用String inventoryData 接受 与js传参名一样 ,然后解析成json 取
阿豆响当当 2019-08-27
  • 打赏
  • 举报
回复
ajax写法问题吧,data改成这样试下 data :{ inboundList : JSON.stringify(jsonData) } 之前你的写法,data : inventoryData, 可能是没有指定要映射到那个参数上的原因
ManbaBryant 2019-08-27
  • 打赏
  • 举报
回复
引用 13 楼 devin_jia 的回复:
{"inventoryList":[{"inboundName
啥意思?
devin_jia 2019-08-27
  • 打赏
  • 举报
回复
传 {"inventoryList":[{"inboundName 接收 private List<Inbound> inboundList; inventoryList和inboundList名字要统一啊
devin_jia 2019-08-27
  • 打赏
  • 举报
回复
{"inventoryList":[{"inboundName
  • 打赏
  • 举报
回复
前端传list 你后台也得用list接收呀
小然然呀 2019-08-27
  • 打赏
  • 举报
回复
①contentType 设置成application/json ②Controller 的参数List 类型 前加上@RequestBody ③List引用名称和前端stringify里的一致。
qq_40613129 2019-08-27
  • 打赏
  • 举报
回复
引用 7 楼 KKKKKKobe0824 的回复:
[quote=引用 5 楼 Coder-lkkk 的回复:]
InboundList是啥?应该要写成Inbound[ ] 才行吧

我封装了一个list实体的 这样写应该没错吧[/quote]

封装类没错,调用时出的对吧

qq_40613129 2019-08-27
  • 打赏
  • 举报
回复
引用 1 楼 lkwahl 的回复:
注解漏写了,@Requestbody

注释是对的啊
番茄chao鸡蛋 2019-08-26
  • 打赏
  • 举报
回复
您传的是json数组吧,先将数组转为字符串,服务器后端再解析为json数组;给你我曾经的几张图看看
加载更多回复(10)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧