在我的spring mvc(Spring 3.0.2)应用程序中,我有两种不同的控制器方法 处理相同的url模式但使用不同的方法(GET和SET) 如果我将它们都放在单个控制器类中,它可以正常工作:
@Controller
class MainController {
@RequestMapping(value="/somepage", method=RequestMethod.GET)
public String getMethod() {
return "redirect:/get";
}
@RequestMapping(value="/somepage", method=RequestMethod.POST)
public String postMethod() {
return "redirect:/post";
}
}
但是当在两个不同的控制器类中定义这些方法时,它不起作用
在这种情况下,只有一种方法有效,而另一种方法给我405错误
(不支持请求方法)
所以问题是为什么,以及如何使其按预期工作?
P.S。:不工作的代码:
@Controller
class GetController {
@RequestMapping(value="/somepage", method=RequestMethod.GET)
public String getMethod() {
return "redirect:/get";
}
}
@Controller
class PostController {
@RequestMapping(value="/somepage", method=RequestMethod.POST)
public String postMethod() {
return "redirect:/post";
}
}
答案 0 :(得分:7)
编辑:
使用 3.1.0.M2 接缝是可以的,其中映射由@RequestMapping
注释中的所有内容完成。
因此,最好的选择是更改为最新的Spring版本。
在Spring 3.0.5上在bean实例化时发生此错误:
java.lang.IllegalStateException: Cannot map handler 'postController' to URL path [/somepage]: There is already handler of type [class test.GetController] mapped.
就日志和代码而言,@Controller
bean仅映射到url,而实例化完成后,方法调度将在稍后完成。
答案 1 :(得分:1)
对我来说看起来像个错误。尝试ugprading到3.0.5或最新的3.1里程碑。如果问题仍然存在,请在spring的JIRA中创建一个问题。