素材牛VIP会员
@RequestParam 获取参数值有问题
 铁***1  分类:Java代码  人气:1798  回帖:2  发布于6年前 收藏

很奇怪的问题
@RequestParamrequest.getParameter("pID")取到的值竟然不是同一个

求解

【补充】

debug了一下,传入参数pID确实只有一个,但是@RequestParam就是注入了两个

这就郁闷了

【第二次补充】

下午再加了ServletRequestListener监听器


测试结果就是监听器的初始化销毁参数都是对的pID只有一个值
但是从controller中通过@RequestParam获取时又成为了两个。
越来越接近事实的真相。

【第三次补充】
这次再次添加了ServletRequestAttributeListener监听器

结果大跌眼镜,不经过attributeReplacedattributeAddedrequest就自动添加了三个pID.通过@RequestParam来的?怎么来的?为什么不经过监听器?为什么会有?疑问越来越多。。。。。

【第四次补充】
这次终于找到了问题所在异常
我们在controllerservice中有抛异常的处理

springMVC提供的HandlerExceptionResolver集中处理异常

我们的测试是把异常注释,然后获取pID正常没问题
最后看怎么处理了,还有一次补充

【最后补充】
返回视图出了问题,原因是我们返回json不返回视图,所以应该在HandlerExceptionResolver中将return null改为return new ModelAndView();

讨论这个帖子(2)垃圾回帖将一律封号处理……

Lv5 码农
15***75 技术总监 6年前#1

你是不是在参数里带了两个pID?比如:

http://.../showCorrelation?pID=34cb...&pID=3574...

req.getParameter("pID")只会取到其中一个(如果有多个以"pID"为key参数,具体取第几个请查下Servlet API的Javadoc或Servlet Container的源码),要取所有以"pID"为key的参数必须用req.getParameterValues();

你查下Spring MVC对@RequestParam是怎么解释的,或者看下源码是怎么实现的,会不会把所有以"pID"为key的参数都取出来,多余一个的话就用逗号连接?

Lv3 码奴
65***14 PHP开发工程师 6年前#2

返回视图出了问题,原因是我们返回json不返回视图,所以应该在HandlerExceptionResolver中将return null改为return new ModelAndView();

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取