否定 Spring 控制器的 RequestMapping 中的参数

Pau*_*aul 5 spring controller spring-mvc

你好,

我的控制器中有两种方法,如果参数是某个值,我试图让一种方法触发,如果参数不是该值,则触发另一种方法。当参数等于某个值时,我的“not”方法就会触发。

根据(我的理解)这一点,我正确地编写了表达式。以下是这两个方法的签名:

@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?
}
Run Code Online (Sandbox Code Playgroud)

我启用了 Spring 调试日志记录,并且看到 Spring 将参数转换为值为“1”的 RequestParam 字符串。然而,在下一行中,它决定将其映射到错误的方法。

我究竟做错了什么?

谢谢!

Ral*_*lph 4

这不是你的错:这是一个 Bug SPR-8059。目前它已在 Version 3.1M2 和svn Trunk rev 4408中修复。

解决方法是不在!=中使用@RequestMappingif相反,你必须手动完成:

@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);
  }
}
Run Code Online (Sandbox Code Playgroud)