Java 如何按参数值拆分Spring MVC请求映射

Java 如何按参数值拆分Spring MVC请求映射,java,spring,spring-mvc,Java,Spring,Spring Mvc,在SpringMVC3中,我想用两个不同的控制器类处理相同的url,具体取决于url参数的值@RequestMapping注释甚至有这样的字段:参数,我认为下面是两种不同的映射(我在类级别使用映射): 及 但事实并非如此。Spring对第二种情况抛出异常,即/myurl的控制器已映射(由第一种情况) 对于按参数拆分请求映射,是否有一些精确的解决方案?可能正在扩展@RequestMapping或使用代理作为控制器,并根据参数调用不同的控制器。。。 有什么想法吗 更新 这只适用于方法级别,而不适用于

在SpringMVC3中,我想用两个不同的控制器类处理相同的url,具体取决于url参数的值@RequestMapping注释甚至有这样的字段:参数,我认为下面是两种不同的映射(我在类级别使用映射):

但事实并非如此。Spring对第二种情况抛出异常,即/myurl的控制器已映射(由第一种情况)

对于按参数拆分请求映射,是否有一些精确的解决方案?可能正在扩展@RequestMapping或使用代理作为控制器,并根据参数调用不同的控制器。。。 有什么想法吗

更新 这只适用于方法级别,而不适用于类级别。。。 这将:

@Controller
@RequestMapping(value = "/myurl")
public class Class123 {

    @RequestMapping(value = {"edit.htm"}, params = "src=1")
    public String open1(Map<String, Object> map) throws Exception {....}

    @RequestMapping(value = {"edit.htm"}, params = "src=2")
    public String open2(Map<String, Object> map) throws Exception {....}
}
@控制器
@请求映射(value=“/myurl”)
公共课123{
@RequestMapping(value={“edit.htm”},params=“src=1”)
公共字符串open1(映射映射)引发异常{..}
@RequestMapping(value={“edit.htm”},params=“src=2”)
公共字符串open2(映射映射)引发异常{..}
}
这不会:

@Controller
@RequestMapping(value = "/myurl", params = "src=1")
public class Class123_1 {

    @RequestMapping(value = {"edit.htm"})
    public String open(Map<String, Object> map) throws Exception {....}
}


@Controller
@RequestMapping(value = "/myurl", params = "src=2")
public class Class123_2 {

    @RequestMapping(value = {"edit.htm"})
    public String open(Map<String, Object> map) throws Exception {....}
}
@控制器
@请求映射(value=“/myurl”,params=“src=1”)
公共课1231{
@RequestMapping(值={“edit.htm”})
公共字符串打开(映射映射)引发异常{..}
}
@控制器
@请求映射(value=“/myurl”,params=“src=2”)
公共课1232{
@RequestMapping(值={“edit.htm”})
公共字符串打开(映射映射)引发异常{..}
}

我想把逻辑分成不同的类。

使用RequestMappingHandlerMapping(在Spring 3.1中新增)和DefaultAnnotationHandlerMapping(被RequestMappingHandlerMapping取代的类)听起来有点不同。

应该可以。我用过,它很管用。还有一些你没有告诉我们的事情。也许其他控制器映射了这个URL。嗯,也许这只适用于同一类中的方法。虽然文档中没有提到,但不确定这是否是一个bug。也许您可以将方法保留在一个类中,但随后委托给另一个类以保持实现的独立性?我不认为这是一个bug。可能的问题是,我没有定义默认映射,从类缩小到方法(smth,比如/myurl/*),遵循这个关于委托的方向,我考虑创建一个代理类,为适当的方法调用一个实现。但这肯定会简化我的任务
@Controller
@RequestMapping(value = "/myurl")
public class Class123 {

    @RequestMapping(value = {"edit.htm"}, params = "src=1")
    public String open1(Map<String, Object> map) throws Exception {....}

    @RequestMapping(value = {"edit.htm"}, params = "src=2")
    public String open2(Map<String, Object> map) throws Exception {....}
}
@Controller
@RequestMapping(value = "/myurl", params = "src=1")
public class Class123_1 {

    @RequestMapping(value = {"edit.htm"})
    public String open(Map<String, Object> map) throws Exception {....}
}


@Controller
@RequestMapping(value = "/myurl", params = "src=2")
public class Class123_2 {

    @RequestMapping(value = {"edit.htm"})
    public String open(Map<String, Object> map) throws Exception {....}
}