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

2022-09-04 04:47:26

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

@RequestMapping(value = "/myurl", params = "name=val1")

@RequestMapping(value = "/myurl", params = "name=val2")

但事实并非如此。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 {....}
}

这不会:

@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 {....}
}

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


答案 1

这听起来像是使用RequestMappingHandlerMapping(Spring 3.1中的新功能)与DefaultAnnotationHandlerMapping(由RequestMappingHandlerMapping取代的类)之间的区别。


答案 2

推荐