class HomeController{
@RequestMapping(value="index")
public void home(){
}
}
class DemoController{
@RequestMapping(value="index")
public void demo(){
}
}
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
}
}
class HomeController{
@RequestMapping(value="home/index")
public void home(){
}
}
class DemoController{
@RequestMapping(value="demo/index")
public void demo(){
}
}
3条答案
按热度按时间svgewumm1#
https://stackoverflow.com/a/34590355/2682499在这一点上只是部分正确。
你可以**让多个控制器方法使用同一个URI,只要你向Spring提供足够的附加信息,说明它应该使用哪一个。你是否应该 * 这样做是另一个问题。我当然不建议在两个单独的控制器类中使用同一个URI,以避免混淆。
你可以这样做:
有关重载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--用于部分请求参数。
eufgjt7s2#
在Spring Web MVC中这是不可能的。每个Map在您的上下文中必须是唯一的。如果不是,您将在上下文初始化期间收到
RuntimeException
。您甚至不能使用参数来区分端点,因为在搜索合适的处理程序(适用于Servlet环境)时不会对它们进行评估。来自
@RequestMapping
javadoc:在Servlet环境中,参数Map被认为是在类型级别强制执行的限制。主路径Map(即指定的URI值)仍然必须唯一地标识目标处理程序,参数Map只是表示调用处理程序的先决条件。
请注意,您可以执行相反的操作,因此多个URL可以指向同一个处理程序。
lvjbypge3#
不幸的是,这是不可能的,请求Map必须是唯一的,否则应用程序无法确定传入的请求应该Map到哪个方法。
你可以做的是扩展请求Map: