gpt4 book ai didi

Spring RequestMapping 头痛

转载 作者:行者123 更新时间:2023-11-28 22:21:28 25 4
gpt4 key购买 nike

刚刚结束我的上一次冒险,现在我正在尝试映射更复杂的 URL 并疯狂地尝试使其按照 Spring 文档建议的方式工作。

同样,这些工具是:

  • Java 1.6
  • Spring 3.2 MVC
  • Tomcat 7

我想做的是匹配 foo/bar/id 形式的 URL,其中 id 是一个整数。我应该这样做的方式是像这样注释我的 Controller 方法:

@RequestMapping("/foo/bar/{id}")

然后在 web.xml 中有这个:

<url-filter>/foo/*</url-filter>

或者这个:

<url-filter>/foo/bar/*</url-filter>

然后在部署到 Tomcat 之后,我应该能够访问/mycontext/foo/bar/id。但这不起作用。

为了完整性,这里有几个变体和结果:

  • 方法映射:/foo,url-filter:/foo,结果:/mycontext/foo 有效。
  • 方法映射:/foo/*,url-filter:/foo/*,结果:部署时报告方法成功映射到/foo/*,但访问/mycontext/foo/bar 失败。
  • 方法映射:/foo/*,url-filter:/foo/bar,结果:在部署时映射,但访问/mycontext/foo/bar 失败。
  • 方法映射:/foo/bar,url-filter:/foo/bar,结果:/mycontext/foo/bar 有效。
  • 方法映射:/foo/bar/*,url-filter:/foo/bar/*,结果:在部署时映射,但访问/mycontext/foo/bar/(anything) 失败。
  • 方法映射:/foo/bar/{id},url-filter:/foo/bar/*,结果:在部署时映射,但访问/mycontext/foo/bar/(anything) 失败。

所有失败都伴随着来自 mycontext 的 DispatcherServlet 的错误消息,即没有找到映射,尽管所有失败都报告在部署时设置映射成功。由于我从正确的 DispatcherServlet 收到错误,这表明我的 url-filter 设置没有问题。但是关于在部署时成功映射的消息引用了 @RequestMapping 注释中的任何内容,所以我不知道 Spring 会先说它很好,然后又说它不匹配是怎么回事。

关于这里的通配符,我有什么不明白的地方吗?

最佳答案

如果你有@RequestMapping("/foo/bar/{id}")这是在与 DispatcherServlet 的 url-pattern 匹配结合后映射的。考虑一个例子,其中 url-pattern 如下:

<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/dispatcher</url-pattern>
</servlet-mapping>

在这种情况下,DispatcherServlet 将仅在来自客户端的调用为:/dispatcher/foo/bar/1 时映射该方法。

因此,如果您想说@RequestMapping 来响应http://<server>/<context>/foo/bar/1比如,只需将 DispatcherServlet 的 url-pattern 设为 /相反:

<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

关于Spring RequestMapping 头痛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16322784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com