gpt4 book ai didi

spring - DefaultAnnotationHandlerMapping 如何工作

转载 作者:行者123 更新时间:2023-12-03 11:37:43 24 4
gpt4 key购买 nike

我对 DefaultAnnotationHandlerMapping 的工作方式感到困惑。

在我的 web.xml 我有

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

<url-pattern>/users</url-pattern>
<url-pattern>/user/*</url-pattern>
</servlet-mapping>

我有这样的 Controller ,
   @RequestMapping(value="/user/adduser", method={RequestMethod.POST})
public void addAdmin(@ModelAttribute("myData") myData data) {

System.out.println("We reached adduser controller");

}

在jsp文件中我有
<form:form id="adduser" method="post" action="/user/adduser" commandName="myData">

这不起作用。我收到错误 no handler mapping found for "/adduser"和 404 for the page "/user/adduser"

但是在 .xml 文件中,如果我提到
  <url-pattern>/user/adduser</url-pattern>

它有效,或者如果我让 Controller 像,
  @RequestMapping(value="/adduser", method={RequestMethod.POST})

也有效。提交页面时,它会到达正确的 Controller 。

我现在对@ReuqestMapping 的工作方式感到困惑。当请求像“/user/adduser”这样的请求时,它会从哪里开始寻找正确的类和正确的方法?

最佳答案

Spring 赛对战pathInfo HttpServletRequest 的属性(property).

如果您的 web.xml指定 <url-pattern>/user/*</url-pattern> ,然后是 pathInfo将是带有 /user 的路径删除了前缀,所以 @RequestMapping必须是 /adduser .

web.xml指定 <url-pattern>/user/adduser</url-pattern> ,然后是 pathInfo将是完整的/user/adduser路径,所以 @RequestMapping必须与之匹配。

这不是由 Spring 完成的,而是由 servlet 容器完成的,而且有时可能会有点困惑。

您可以通过在 @RequestMapping 中使用通配符来缓解这种情况。 ,例如

@RequestMapping(value="**/adduser", method={RequestMethod.POST})

关于spring - DefaultAnnotationHandlerMapping 如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5740958/

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