Отрицательные параметры в RequestMapping контроллера Spring - PullRequest
4 голосов
/ 12 июля 2011

Привет,

У меня в контроллере два метода, и я пытаюсь запустить один метод, если параметр является определенным значением, и другой метод, если параметр не является этим значением. Мой метод "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?
}

У меня включено ведение журнала отладки Spring, и я вижу, где Spring преобразует параметр в строку RequestParam со значением '1'. Однако в следующей строке он решает сопоставить его с неправильным методом.

Что я делаю не так?

Спасибо!

1 Ответ

3 голосов
/ 12 июля 2011

Это не ваша вина: это ошибка 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);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...