【java】@RequestParam 获取参数值有问题

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

【java】@RequestParam 获取参数值有问题

求解

【补充】

【java】@RequestParam 获取参数值有问题

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

【java】@RequestParam 获取参数值有问题

这就郁闷了

【第二次补充】

下午再加了ServletRequestListener监听器

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

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

【java】@RequestParam 获取参数值有问题

【java】@RequestParam 获取参数值有问题

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

【第四次补充】
这次终于找到了问题所在异常
我们在controllerservice中有抛异常的处理
【java】@RequestParam 获取参数值有问题
springMVC提供的HandlerExceptionResolver集中处理异常
【java】@RequestParam 获取参数值有问题
我们的测试是把异常注释,然后获取pID正常没问题
最后看怎么处理了,还有一次补充

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

回答

你是不是在参数里带了两个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的参数都取出来,多余一个的话就用逗号连接?

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

以上是 【java】@RequestParam 获取参数值有问题 的全部内容, 来源链接: utcz.com/a/74994.html

回到顶部