一个URL的请求处理程序不能位于不同的控制器中

时间:2011-09-13 12:54:21

标签: java spring spring-mvc

在我的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";
    }
}

2 个答案:

答案 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中创建一个问题。