spring接收ajax参数的几种方法(ajax传递数据至controller)

本文详细介绍了在Spring MVC中如何使用@ModelAttribute、@PathVariable、HttpServletRequest和@RequestParam注解来接收Ajax发送的数据,包括各种注解的使用场景和映射结果。总结了在不同情况下选择合适注解的方法。

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

一、@ModelAttribute 注解

使用@ModelAttribute这个方法可以直接将参数映射成pojo对象
不加@ModelAttribute注解,直接接收pojo对象,同样能够接收到参数

前端ajax请求
<script type="text/javascript">
	$(function(){
		$.ajax({
			type:"post",
			url:"http://localhost:8080/test",
			data:{
				"name":"张三",
				"phone":"10086",
				"password":"123456"
			},
			async:true,
			success:function(data){
				console.log(data);//在控制台输出信息。
			}
		});
	})
</script>
java接收参数
@RequestMapping("/test")
@ResponseBody
public String testUser(@ModelAttribute("TUser") TUser user){
//使用@ModelAttribute这个方法可以直接将参数映射成pojo对象
//不加@ModelAttribute注解,直接接收pojo对象,同样能够接收到参数
	System.out.println(user.getName());
	System.out.println(user.getPassword());
	System.out.println(user.getPhone());
	return "ok";
}

控制台得到: 张三 123456 10086

二、@PathVariable注解

@PathVariable是把请求的路径上的指定的分段点映射成指定的参数名称
@PathVariable可以指定多个,如果一个参数都不放在url路径中,直接请求访问。http://localhost:8080/test。同样能够接收到参数

前端ajax请求
<script type="text/javascript">
	$(function(){
		$.ajax({
			type:"post",
			url:"http://localhost:8080/test/10086",
			data:{
				"name":"张三",
				"password":"123456"
			},
			async:true,
			success:function(data){
				console.log(data);
			}
		});
	})
</script>
java接收参数
@RequestMapping("/test/{phone}")
@ResponseBody
public String testUser(String name,@PathVariable String phone,String password){
	System.out.println(name);
	System.out.println(phone);
	System.out.println(password);
	return "ok";
}

三、直接用HttpServletRequest获取

前端代码等同于案例一
java接收参数
@RequestMapping("/test")
@ResponseBody
public String testUser(HttpServletRequest request, HttpServletResponse response){
	System.out.println(request.getParameter("name"));
	System.out.println(request.getParameter("phone"));
	System.out.println(request.getParameter("password"));
	return "ok";
}
映射结果完全相同于案例一

四、@RequestParam绑定请求参数

前端请求代码等同于案例一
java接收参数
@RequestMapping("/test")
@ResponseBody
public String testUser(@RequestParam("name") String a,@RequestParam("phone") String b, String password){
	/**
	* @RequestParam() 里边的值必须要和前端传递过来的参数名字相同
	*/
	System.out.println(a);
	System.out.println(b);
	System.out.println(password);
	return "ok";
}
映射结果完全相同

总结:
1、如果前端传递过来的参数与后台接口定义的参数名相同,可以不需要任何注解,如果所有参数都在一个pojo对象中,那么可以直接映射成pojo对象,也可以使用HttpServletRequest 接收参数
2、如果想使用 resfull 风格的请求方式的话,可以使用@PathVariable进行注解
3、如果前端传递的参数与后台接口定义的参数名称不相同,那么就使用RequestParam 注解

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值