【问题标题】:Spring 3.0 MVC Controller Request MappingsSpring 3.0 MVC 控制器请求映射
【发布时间】:2012-05-30 17:29:50
【问题描述】:

我的应用中有 2 个控制器,如下所示

@Controller("/test1")
public class Test1Controller {
    @RequestMapping("/new")
    public String newtest1() {
     //....
    }  
}

@Controller("/test2")
public class Test2Controller {
    @RequestMapping("/new")
    public String newtest2() {
     //....
    }  
}

现在,如果我向/test2/new 发出请求,该请求将发送到另一个控制器/test1/new。这里有什么问题吗?

【问题讨论】:

  • 两个类具有相同的名称 (Test1Controller) - 我认为这是一个错误?
  • @TomaszNurkiewicz:没关系。导致控制器 bean 名称不同。

标签: java spring spring-mvc


【解决方案1】:

解析控制器名称只是一种后备方式,它不会在该名称和实际请求映射之间混搭。只需在控制器上放置一个真实的请求映射即可。

@Controller
@RequestMapping("/test1")
public class Test1Controller {
    @RequestMapping("/new")
    public String newtest1() {
     //....
    }  
}

@Controller
@RequestMapping("/test2")
public class Test2Controller {
    @RequestMapping("/new")
    public String newtest2() {
     //....
    }  
}

【讨论】:

  • 某种原因,这对我也不起作用:(。现在请求根本没有被控制器拦截。
  • root 的完整 URL 是什么/调度程序 servlet 映射到什么?您是使用 mvc:annotation-driven 还是设置了自己的映射处理程序?
  • 要使用类型级别@RequestMapping,您需要删除基于bean 名称的冲突映射。 (也就是说,不要同时拥有@Controller("/test") 和@RequestMapping("/test"))并确保加载了DefaultAnnotationHandlerMapping(如果不使用默认值。)
  • 重新阅读您对原始问题的描述,听起来您可能还将调度程序映射到 web.xml 中的 /test1 和 /test2 ,这会导致同样的问题。调度程序 servlet 应该在 web.xml 中映射到控制器之上的级别。
  • 我没有使用任何处理程序。我的完整 url 路径类似于http://localhost:8080/myca/test1/new。我要声明这样的事情@Controller @RequestMapping("/test1") ...
猜你喜欢
  • 1970-01-01
  • 2020-01-22
  • 1970-01-01
  • 2014-03-13
  • 2020-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-24
相关资源
最近更新 更多