对于每种方法,Spring中是否有可能有一个方法,其中两个不同的URL具有不同的参数?
下面是伪代码
@RequestMethod(URL1-param1, URL2-param2)
public void handleAction(@ModelAttribute("A") A a, ...) {
}
同时ULR1在其他控制器中映射为
@RequestMethod(URL1)
public void handleAction1(@ModelAttribute("A") A a, ...) {
}
答案 0 :(得分:14)
更新:看来你的问题完全不同了。
不,你不能在不同的控制器中使用不同参数的相同url。它没有多大意义 - url指定了资源或操作,并且在两个控制器(表示不同的行为)中不能以完全相同的方式命名。
您有两种选择:
原始答案:
没有。但是你可以有两种方法做同样的事情:
@RequestMethod("/foo")
public void foo(@ModelAttribute("A") A a) {
foobar(a, null);
}
@RequestMethod("/bar")
public void bar(@ModelAttribute("B") B b) {
foobar(null, b);
}
如果我没有正确理解,并且您想要相同的ModelAttribute,那么只需:
@RequestMapping(value={"/foo", "/bar"})
最后 - 如果您需要不同的请求参数,可以使用@RequestParam(required=false)
列出所有可能的参数。
答案 1 :(得分:2)
您可以为此处理程序提供多个映射
@RequestMapping(value={"", "/", "welcome"})
public void handleAction(@ModelAttribute("A") A a, ...) { }
但是如果你想为每个映射使用不同的参数,那么你必须提取你的方法。
答案 2 :(得分:0)
像这样的东西
@RequestMapping(value={"URL1"}, method=RequestMethod.POST)
public String handleSubmit(@ModelAttribute("A") A command, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
return helperSubmit();
}
@RequestMapping(value={"URL2"}, method=RequestMethod.POST)
public String handleSubmit(@ModelAttribute("A") A command, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
return helperSubmit();
}
private helperSubmit() {
return "redirect:" + someUrl;
}