SpringMVC3:在不同的控制器中使用相同的@RequestMapping,使用集中的XMLURL映射(混合XML/注释方法)

SpringMVC3:在不同的控制器中使用相同的@RequestMapping,使用集中的XMLURL映射(混合XML/注释方法),spring,spring-mvc,request-mapping,Spring,Spring Mvc,Request Mapping,我喜欢将所有映射保持在同一位置,因此我使用XML配置: /视频/**=视频控制器错误 /blog/**=blogController 真的 如果我在另一个控制器中创建具有相同名称的第二个请求映射 @Controller public class BlogController { @RequestMapping(value = "/info", method = RequestMethod.GET) public String info(@RequestParam("t") S

我喜欢将所有映射保持在同一位置,因此我使用XML配置:


/视频/**=视频控制器错误
/blog/**=blogController
真的
如果我在另一个控制器中创建具有相同名称的第二个请求映射

@Controller
public class BlogController {
    @RequestMapping(value = "/info", method = RequestMethod.GET)
    public String info(@RequestParam("t") String type) {
        // Stuff
    }
}

@Controller
public class VideoController {
    @RequestMapping(value = "/info", method = RequestMethod.GET)
    public String info() {
        // Stuff
    }
}
我得到一个例外:

Caused by: java.lang.IllegalStateException: Cannot map handler 'videoController' to URL path [/info]: There is already handler of type [class com.cyc.cycbiz.controller.BlogController] mapped.
有没有办法在不同的控制器中使用相同的请求映射

我希望有2个URL作为:

/video/info.html

/blog/info.html
使用Spring MVC 3.1.1

编辑: 我不是唯一一个:


应用程序的其余部分工作正常。

只需在控制器级别放置一个requestmapping:

@Controller
@RequestMapping("/video")
public class VideoController {
    @RequestMapping(value = "/info", method = RequestMethod.GET)
    public String info() {
        // Stuff
    }
}

@Controller
@RequestMapping("/blog")
public class BlogController {
    @RequestMapping(value = "/info", method = RequestMethod.GET)
    public String info(@RequestParam("t") String type) {
        // Stuff
    }
}

您可以使用每个方法的参数映射。见我的问题和答案:


我不这么认为,因为这两个请求映射都由两个不同的映射处理程序/适配器处理。你能告诉我你决定保留
simplerlhandermapping
的原因吗?这只是个人品味的问题。我喜欢将其集中化,而不是在每个控制器中定义。我认为它也提供了更大的灵活性。+1,这一点,你不能像XML和基于注释的映射那样混搭。它们是由不同的制图员处理的,而不是“汇总在一起”@Biju:这是我试图避免的。@Aff:你可能是对的,尽管这对我来说是有意义的。请参见编辑。