Java Spring@RequestParam不';t正确处理多个变量-示例测试用例
下面给出的测试用例显示了一个简单的例子,其中我有两个参数Java Spring@RequestParam不';t正确处理多个变量-示例测试用例,java,spring-mvc,Java,Spring Mvc,下面给出的测试用例显示了一个简单的例子,其中我有两个参数paramA和paramB 如果调用/paramtesturl,则调用paramtest()方法 如果我为paramA输入true,则调用方法aTrue() 但是,当我为paramA和paramB输入true时,将调用方法bTrueNotA() 但是第三个@RequestMapping调用A=True和B=正确。当这两个参数都为true时,通过我的重新确认,应该调用aTrue() @RequestMapping("paramtest")
paramA
和paramB
- 如果调用
url,则调用/paramtest
方法paramtest()
- 如果我为
输入paramA
,则调用方法true
李>aTrue()
- 但是,当我为
和paramA
输入paramB
时,将调用方法true
李>bTrueNotA()
@RequestMapping
调用A=True
和B=正确
。当这两个参数都为true时,通过我的重新确认,应该调用aTrue()
@RequestMapping("paramtest")
@ResponseBody
public String paramtest(){
return "<html><head></head><body>" +
"<form action=paramtest method=post>" +
"paramA: <input type=text name=paramA /><br>" +
"paramB: <input type=text name=paramB /><br>" +
"<input type=submit>" +
"</form>" +
"</body></html>";
}
@RequestMapping(value="paramtest", params="paramA=true")
@ResponseBody
public String aTrue(){
return "A=true";
}
@RequestMapping(value="paramtest", params={"paramB=true", "paramA!=true"})
@ResponseBody
public String bTrueNotA(){
return "B=True; A!=true";
}
@RequestMapping(“paramtest”)
@应答器
公共字符串paramtest(){
返回“”+
"" +
“参数:
”+
“参数:
”+
"" +
"" +
"";
}
@请求映射(value=“paramtest”,params=“paramA=true”)
@应答器
公共字符串aTrue(){
返回“A=true”;
}
@RequestMapping(value=“paramtest”,params={“paramB=true”,“paramA!=true”})
@应答器
公共字符串bTrueNotA(){
返回“B=True;A!=True”;
}
我想这可能是春天的一个bug。我尝试了以下映射:
@RequestMapping(value="/paramtest", params={"paramA=true"})
@ResponseBody
public String function A() { return "A"; }
@RequestMapping(value="/paramtest", params={"paramA=true", "paramB=foobar"})
@ResponseBody
public String function B() { return "B"; }
@RequestMapping(value="/paramtest", params={"paramA=!true", "paramB=foo"})
@ResponseBody
public String function C() { return "C"; }
使用现有表单和以下参数,我得到的结果如下:
paramA=true
A()按预期调用
paramA=true,paramB=foobar
B()按预期调用
paramA=not_true,paramB=foo
404页,而不是预期的C()
我在Tomcat控制台上遇到了以下错误:
WARN org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver 142 - No matching handler method found for servlet request: path '/paramtest', method 'POST', parameters map['paramB' -> array<String>['foo'], 'paramA' -> array<String>['not_true']]
WARN org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver 142-找不到与servlet请求匹配的处理程序方法:路径'/paramtest',方法'POST',参数映射['paramB'->数组['foo'],'paramA'->数组['not_true']
所有这些都与Spring 3.0.5配合使用。请注意,myParam=myValue
仅在Spring 3.0.4之后可用(未列出该选项)。而且,我不认为!myParam=myValue
是有效的,因为该参数未在列表中列出
很抱歉,这不是您问题的解决方案,但想分享我的调查:)您使用的是哪个版本的spring?如果将“paramA!=true”更改为“!paramA=true”,会发生什么?好主意。尝试了,但没有解决:当b=true和a=false(或a为nothing,null)时,调用paramtest()。当我使用paramA时=是的,它仅根据paramB调用该方法,但当我这样做时!paramA=true它从不调用bTrueNotA()。非常感谢您的评论。我也在他们的论坛上发了帖子,没有回应。关于这件事我会发一封邮件。知道其他人可以重新产生问题总是好的。这被确认为JIRA中的一个bug: