您好,
我的控制器中有两个方法,如果参数是某个值,我会尝试触发一个方法,如果参数不是那个值,则尝试另一个方法。当param等于某个值时,我的“not”方法就会触发。
根据(我的理解)this我正确地写了表达式。以下是两种方法的签名:
@RequestMapping(value = "/doit", params= {"output=grouped", "display!=1"})
public @ResponseBody HashMap<String, Object> doSomething(
@RequestParam("text") String text,
@RequestParam("display") String display)
{
// this method runs if display=1 but why?
}
@RequestMapping(value = "/doit", params= {"output=grouped", "display=1"})
public @ResponseBody HashMap<String, Object> doSomethingElse(
@RequestParam("text") String text)
{
// this method is not being called when display=1...why not?
}
我启用了Spring调试日志,我看到Spring将参数转换为值为“1”的RequestParam字符串。但是,在下一行中,它决定将其映射到错误的方法。
我做错了什么?
谢谢!
答案 0 :(得分:3)
这不是你的错:它是一个Bug SPR-8059。目前它已在版本3.1M2和svn Trunk rev 4408中修复。
解决方法是不在!=
中使用@RequestMapping
。相反,您必须手动使用if
:
@RequestMapping(value = "/doit", params= {"output=grouped")
public @ResponseBody HashMap<String, Object> acceptAll(
@RequestParam("text") String text,
@RequestParam("display") String display) {
if("1".equals(display) {
return doSomethingElse(text);
} else {
return doSomething(text,display);
}
}