Я думаю, что это может быть ошибка весной. Я пробовал со следующими сопоставлениями:
@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']]
Все это в Spring 3.0.5. Обратите внимание, что myParam!=myValue
был доступен только начиная с Spring 3.0.4 (в 3.0.3 doc эта опция не указана). Кроме того, я не думаю, что !myParam=myValue
является действительным, так как это не указано в текущей версии 3.0.5 .
Извините, это не решение вашей проблемы, но хотел поделиться своим исследованием:)