springMVC接受JSON参数

本文介绍了解决Ajax向后台传递复杂对象时遇到的问题,并提供了解决方案,包括如何正确传递单个对象及列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考博文地址:http://blog.youkuaiyun.com/LostSh/article/details/68923874 

     前几天做项目的时候,遇到了一个ajax传递参数不成功的问题,现在记录下来。

问题描述:

      想向后台传递一个user对象,我是这么写的,直接传了一个json对象过去,但是后台并没有接受到传递的值。

      js代码:

$.ajax({
		url : ctx + "/system/user/springMVC",
		type : "post",
		data : {
			'user':{
				'name':'userName'
			  }			
		},
		dataType : "json",
		success : function(result) {
			if (result) {
				$.messager.alert("温馨提示", result.message);
			}
		}
	});
controller层代码:

@RequestMapping(value = "springMVC",method = RequestMethod.POST)
	@ResponseBody
	public void springMVC(User user) {
		System.out.println(user.getName());
	}
   结果发现后台并没有接收到user传递过来的值,请教了一下别人 ,把外面包裹的user给去掉就行了,即:
$.ajax({
		url : ctx + "/system/user/springMVC",
		type : "post",
		data : {
			'name':'userName'			 	
		},
		dataType : "json",
		success : function(result) {
			if (result) {
				$.messager.alert("温馨提示", result.message);
			}
		}
	});
   果然在后台获取到了name的值,进一步请教,为什么我那种方式不行,答曰:因为spring进行参数绑定的时候,如果是基础类型、包装类、以及String,那么它会默认把同名的参数直接赋值,如果是POJO类型的话,就会去找它的set方法,在我这个例子中,代码中并没有 setUser这个方法,所以spring无法给它赋值,但是user中 却有setName这个方法,所以能成功接收这个参数。

还有一个问题,之前我想向后台传递一个user列表,在网上查了一下得知不能直接传,需要使用一个类包装起来,类似于:

public class UserVo  {

    private List<User> userList;

	public List<User> getUserList() {
		return userList;
	}
	
	public void setUserList(List<User> userList) {
		this.userList = userList;
	} 
	   
}

接收的时候使用 UserVo进行接收,例如:    

@RequestMapping(value = "springMVC",method = RequestMethod.POST)  
@ResponseBody  
public void springMVC(UserVo userVo) {   
}  
但是我不想再新建一个类来传递,后来发现可以使用@requestBody这个注解来进行列表数据的传递。

@requestBody接收的是json类型的字符串,所以我们传递对象时,可以先使用JSON.stringify(data)方法将JSON对象转化为JSON字符串。其次 contentType需要改为:"application/json"。例如:

$.ajax({
		url : ctx + "/system/user/springMVC",
		type : "post",
		data : JSON.stringify(userList),
		dataType : "json",
		contentType : "application/json",
		success : function(result) {
			if (result) {
				$.messager.alert("温馨提示", result.message);
			}
		}
	});
     
@RequestMapping(value = "springMVC",method = RequestMethod.POST)
	@ResponseBody
	public void springMVC(@RequestBody List<User> userList) {
		for(User user : userList){
			System.out.println(user.getName());
		}
	}
结果:成功获取到数据。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值