Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SpringMVC:如何以“";a/b/{c}";?_Spring_Spring Mvc - Fatal编程技术网

SpringMVC:如何以“";a/b/{c}";?

SpringMVC:如何以“";a/b/{c}";?,spring,spring-mvc,Spring,Spring Mvc,我可以使用“/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.ha

我可以使用“/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
我注意到所有以“/a/{b}”或/a/{b}/c/{d}”的形式显示URI模板。那么“/a/b/{c}”不可能吗?我是否需要在web.xml中配置任何东西来实现这一点?或者某些(错误)配置是否会阻止该模式被映射?目前,我的dispatcher servlet映射到:

<url-pattern>/</url-pattern>
访问返回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
一起使用,在这种情况下,一切正常

编辑: 实际上,它看起来像是
控制器ClassnameHandlerMapping
的合法行为。它将
控制器
映射到
/a/*
,而不是
/a/**
,因此只接受一个级别的路径层次结构。同样,如果您需要充分的灵活性,请使用
默认注释HandlerMapping
,您可以尝试吗下面的

@RequestMapping(value=“/a/b/{c}”,method=RequestMethod.GET)


我更新了上面的帖子以包含更多的日志信息。似乎正在使用AbstractUrlHandlerMapping?@Sajee:
AbstractUrlHandlerMapping
是一个基类。您上一个问题的日志清楚地表明使用了
ControllerClassNameHandlerMapping
。@axtavt:谢谢您的帮助。我是Spring的新手,您能说明我是如何使用的吗ld use DefaultAnnotationHandlerMapping?还有为什么文档会说“在以前版本的Spring中,用户需要在web应用程序上下文中定义HandlerMappings,以将传入的web请求映射到适当的处理程序。随着Spring2.5的推出,DispatcherServlet启用了DefaultAnnotationHandlerMapping,它在@Controller上查找@RequestMapping注释。通常,不需要替代此默认映射,除非需要替代默认特性值。“?Docs链接上面的引号:对我来说,似乎已经启用了DefaultAnnotationHandlerMapping?@Sajee:如果手动声明一些处理程序映射,则不会应用默认值。由于您上一个问题中的日志显示声明了
ControllerClassNameHandlerMapping
,可能您以某种方式声明了它,因此您需要删除该声明。不,这不起作用。我认为@axtavt在上面的正确路径上,控制器只映射到/a/*而不是/a/**。
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'
public ModelAndView show(@PathParam("c") String c) {

    ModelAndView modelAndView = new ModelAndView("A");

    return modelAndView;
}