当前位置:  开发笔记 > 后端 > 正文

使用相同的请求映射访问多个控制器

如何解决《使用相同的请求映射访问多个控制器》经验,为你挑选了2个好方法。

请找到我的HomeController和DemoController

class HomeController{
@RequestMapping(value="index")
public void home(){
}
}

class DemoController{
@RequestMapping(value="index")
public void demo(){
}
}

当我尝试向索引发送请求时,哪一个会被执行?我想知道如何为多个控制器提供相同的请求映射值



1> RuntimeBlair..:

/sf/ask/17360801/此时仅部分正确.

可以让多个控制器方法使用相同的URI,只要您提供有关应该使用哪一个的Spring足够的附加信息.你是否应该这样做是一个不同的问题.我当然不建议在两个独立的控制器类中使用相同的URI来避免混淆.

可以这样做:

class HomeController{
    @RequestMapping(value="/index", params = {"!name", "!foo"})
    public List listItems(){
        // retrieve Something list
    }

    @RequestMapping(value="/index", params = "name")
    public List listItems(String name) {
        // retrieve Something list WHERE name LIKE %name%
    }

    @RequestMapping(value="/index", params = {"!name", "foo"})
    public List listItems(String foo) {
        // Do something completely different
    }
}

有关重载URI时可能的完整文档,您应该参考@ReqeustMapping文档:https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestMapping .html.并且,特别是https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html#params--用于部分请求参数.



2> Marco Ferrar..:

在Spring Web MVC中,这是不可能的.每个映射在您的上下文中必须是唯一的.如果没有,您将RuntimeException在上下文初始化期间收到.

您甚至无法使用参数来区分端点,因为在搜索合适的处理程序时不会对它们进行求值(适用于Servlet环境).来自@RequestMappingjavadoc:

在Servlet环境中,参数映射被视为在类型级别强制执行的限制.主路径映射(即指定的URI值)仍然必须唯一地标识目标处理程序,参数映射仅表示调用处理程序的前提条件.

请注意,您可以执行相反的操作,因此多个URL可以指向同一个处理程序.看看Spring MVC:将多个URL映射到同一个控制器

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有