spring-mvc:如何以“ a / b / {c}”的形式映射URI模板?
问题内容:
我可以使用“ / a / b”或“ / a / {b}”形式的URI模板来工作。但是,当我尝试“ / a / b / {c}”时,我收到了一条HTTP
404和一条消息,消息形式为“未找到带有URI [/ myapp / a / b / c]的HTTP请求的映射”。
..“但是我也在日志中看到了这些消息,这使我相信映射是正确的…?
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
我注意到spring-mvc文档中的所有示例都以 “ / 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模式的任何想法?
问题答案:
看起来仅当ControllerClassNameHandlerMapping
用作处理程序映射时,才会发生这种情况。
带注释的控制器通常与一起使用DefaultAnnotationHandlerMapping
,在这种情况下,一切正常。
编辑:
实际上,它看起来像是的合法行为ControllerClassNameHandlerMapping
。它映射aController
到/a/*
而不是/a/**
,因此仅接受路径层次的一个级别。同样,如果您需要完全的灵活性,请使用DefaultAnnotationHandlerMapping
。