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

时间:2010-11-16 16:43:49

标签: spring spring-mvc

我可以以“/ 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模式的任何想法?

3 个答案:

答案 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;
}