@RequestParam出现的数据丢失

在Spring MVC中,使用@RequestParam注解获取请求参数时,若参数过大可能会导致数据丢失。解决方法包括:1) 使用@RequestBody注解,确保数据在请求体内;2) 利用HttpServletRequest的getParameterMap()方法直接获取参数。
摘要由CSDN通过智能技术生成

问题复现

  • 在 Sping MVC 中我们经常使用 @RequestParam 注解来获取请求传入的参数。
  • 正常情况下可以正常使用不会产生问题,当传入的参数过大时就会出现参数不全的情况。
  • 下有一段控制器代码如下:
@RestController
public class ApiController{
	
	@PostMapping("in")
	public ResponseMessage inbound(@RequestParam Map params) {
	   System.out.println(params);
	}
}
  • 以上代码当传入的请求参数过长时就会出现参数获取不全的情况。

解决方式

方式一:使用 @RequestBody 注解

  • 这种方式传入的数据必须要在请求体内才可以获取到数据。
  • 示例代码:
@RestController
public class ApiController{
	
	@PostMapping("in")
	public ResponseMessage inbound(@RequestBody Map data) { 
	   System.out.println(data);
	}
}

方式二:使用 request.getParameterMap() 方法

  • 这种方式是通过原生的 HttpServletRequest 对象来获取传入的参数。
  • 示例代码:
@RestController
public class ApiController{
	
	@PostMapping("in")
	public ResponseMessage inbound(HttpServletRequest request) {
		Map<String,String[]> paramMap = request.getParameterMap();
	}
}
  • 获取到的 Map 值是一个字符串数组类型,获取第一个字符串就可以获取到对应的数据。
  • 字符串数组是为了参数中一个参数名多次赋值的的情况一般我们获取第一个就好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值