spring-mvc:如何以“a/b/{c}”的形式映射URI模板?

2023-12-14

我可以获得“/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,在这种情况下一切正常。

EDIT:事实上,这看起来像是一个合法的行为ControllerClassNameHandlerMapping。它映射aController to /a/*而不是/a/**,因此仅接受一层路径层次结构。再说一遍,如果您需要充分的灵活性,请使用DefaultAnnotationHandlerMapping.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring-mvc:如何以“a/b/{c}”的形式映射URI模板? 的相关文章

随机推荐