菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
438
0

@RequestParam 出现的数据丢失

原创
05/13 14:22
阅读数 14707

问题复现

  • 在 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 值是一个字符串数组类型,获取第一个字符串就可以获取到对应的数据。
  • 字符串数组是为了参数中一个参数名多次赋值的的情况一般我们获取第一个就好。

发表评论

0/200
438 点赞
0 评论
收藏