下面给出的测试用例显示了一个简单的例子,其中我有两个参数paramAparamB
如果我调用/paramtesturl,则调用paramtest()方法。
如果输入true作为paramA,则调用方法aTrue()
但是,当我为trueparamA输入paramB时,方法bTrueNotA()被调用。
但第三个需要@RequestMappingA=True。当两个参数都为真时,通过我的重新确认,应该调用B!=true

@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(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=truea()按预期调用
paramA=true, paramB=foobarb()按预期调用
paramA=not_true, paramB=foo404页,而不是预期的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']]

所有这些都与Spring3.0.5有关。请注意,myParam!=myValue仅在spring 3.0.4之后才可用(3.0.3 doc没有列出该选项)。另外,我不认为!myParam=myValue是有效的,因为current 3.0.5 documentation中没有列出这一点。
抱歉,这不是解决您问题的方法,但希望分享我的调查:)

07-28 13:11