我可以以“/ a / b”或“/ a / {b}”的形式获取URI模板。但是当我尝试“/ a / b / {c}”时,我在日志中得到一个HTTP 404和一条消息,形式为“找不到带HTTP的HTTP请求的映射[/ myapp / a / b / c]”。 ..“但我在日志中看到这些消息也让我相信映射是正确的......?
INFO: Mapped URL path [/a] onto handler 'AController'
Nov 16, 2010 12:18:39 PM org.springframework.web.servlet.handler.AbstractUrlHandlerMapping registerHandler
INFO: Mapped URL path [/a/*] onto handler 'AController'
Nov 16, 2010 12:18:39 PM org.springframework.web.servlet.handler.AbstractUrlHandlerMapping registerHandler
我注意到所有the examples in the spring-mvc docs以“/ a / {b}”或/ a / {b} / c / {d}“的形式显示URI模板。所以是”/ a / b / { c}“不可能?我需要在web.xml中配置什么来实现这一点?或者某些(错误的)配置是否会阻止映射该模式?目前我的调度程序servlet映射到:
<url-pattern>/</url-pattern>
控制器如下所示:
@Controller
public class AController {
@RequestMapping(value = "/a/b/{c}", method = RequestMethod.GET)
public ModelAndView show() {
ModelAndView modelAndView = new ModelAndView("A");
return modelAndView;
}
}
访问http://localhost:8080/myapp/a/b/c会返回404,我会在日志中看到这一点:
Nov 16, 2010 12:19:06 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/myapp/a/b/c] in DispatcherServlet with name 'dispatcher'
关于如何正确映射我的URI模式的任何想法?
答案 0 :(得分:2)
看起来这只有在ControllerClassNameHandlerMapping
用作处理程序映射时才会发生。
带注释的控制器通常与DefaultAnnotationHandlerMapping
一起使用,在这种情况下,一切正常。
修改强>
实际上,它看起来像ControllerClassNameHandlerMapping
的合法行为。它将aController
映射到/a/*
而不是/a/**
,因此只接受一级路径层次结构。同样,如果您需要充分的灵活性,请使用DefaultAnnotationHandlerMapping
。
答案 1 :(得分:0)
我可以验证它是否可行。你可以发布控制器的片段吗?
答案 2 :(得分:0)
你可以尝试以下,
@RequestMapping(value =“/ a / b / {c}”,method = RequestMethod.GET)
public ModelAndView show(@PathParam("c") String c) {
ModelAndView modelAndView = new ModelAndView("A");
return modelAndView;
}