请找到我的HomeController和DemoController
class HomeController{ @RequestMapping(value="index") public void home(){ } } class DemoController{ @RequestMapping(value="index") public void demo(){ } }
当我尝试向索引发送请求时,哪一个会被执行?我想知道如何为多个控制器提供相同的请求映射值
/sf/ask/17360801/此时仅部分正确.
您可以让多个控制器方法使用相同的URI,只要您提供有关应该使用哪一个的Spring足够的附加信息.你是否应该这样做是一个不同的问题.我当然不建议在两个独立的控制器类中使用相同的URI来避免混淆.
你可以这样做:
class HomeController{ @RequestMapping(value="/index", params = {"!name", "!foo"}) public ListlistItems(){ // 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--用于部分请求参数.
在Spring Web MVC中,这是不可能的.每个映射在您的上下文中必须是唯一的.如果没有,您将RuntimeException
在上下文初始化期间收到.
您甚至无法使用参数来区分端点,因为在搜索合适的处理程序时不会对它们进行求值(适用于Servlet环境).来自@RequestMapping
javadoc:
在Servlet环境中,参数映射被视为在类型级别强制执行的限制.主路径映射(即指定的URI值)仍然必须唯一地标识目标处理程序,参数映射仅表示调用处理程序的前提条件.
请注意,您可以执行相反的操作,因此多个URL可以指向同一个处理程序.看看Spring MVC:将多个URL映射到同一个控制器