请找到我的HomeController和DemoController
f1 >> data
当我尝试向索引发送请求时,哪一个会被执行? 我想知道如何为多个控制器提供相同的请求映射值
答案 0 :(得分:9)
https://stackoverflow.com/a/34590355/2682499此时只是部分正确。
你可以让多个控制器方法使用相同的URI,只要你提供Spring应该使用哪一个的足够的附加信息。你是否这样做是一个不同的问题。我当然不建议在两个独立的控制器类中使用相同的URI来避免混淆。
你可以做这样的事情:
class HomeController{
@RequestMapping(value="/index", params = {"!name", "!foo"})
public List<Something> listItems(){
// retrieve Something list
}
@RequestMapping(value="/index", params = "name")
public List<Something> listItems(String name) {
// retrieve Something list WHERE name LIKE %name%
}
@RequestMapping(value="/index", params = {"!name", "foo"})
public List<Something> 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--部分请求参数。
答案 1 :(得分:6)
在Spring Web MVC这是不可能的。每个映射在您的上下文中必须是唯一的。如果没有,您将在上下文初始化期间收到RuntimeException
。
您甚至无法使用参数来区分端点,因为在搜索合适的处理程序时不会对它们进行评估(适用于Servlet环境)。来自@RequestMapping
javadoc:
在Servlet环境中,参数映射被视为在类型级别强制执行的限制。主路径映射(即指定的URI值)仍然必须唯一地标识目标处理程序,参数映射只是表示调用处理程序的前提条件。
请注意,您可以执行相反的操作,因此多个URL可以指向同一个处理程序。看看Spring MVC: Mapping Multiple URLs to Same Controller
答案 2 :(得分:4)
不幸的是,这是不可能的。请求映射必须是唯一的,否则应用程序无法确定传入请求应映射到哪种方法。
您可以做的是扩展请求映射:
onloadend