gpt4 book ai didi

java - Spring MVC - 使用注释将 Controller 映射到 URL

转载 作者:搜寻专家 更新时间:2023-10-31 19:58:01 24 4
gpt4 key购买 nike

我在配置我的 Spring Controller 以映射到特定 URL 时遇到了持续的问题,我已经把它归结为一个相当简单的场景,我认为它应该可以工作:

我正在使用注解配置我的 Controller 类,它看起来如下:

@Controller
@RequestMapping(value = "/question/**")
public class QuestionController
{

/**
* Method to build users questions list
*
* @param request
* @param response
* @return
* @throws Exception
*/
@RequestMapping("/list")
public ModelAndView list(HttpServletRequest request, HttpServletResponse response) throws Exception{
//Display Questions List
}
}

Controller 没有进一步的配置,我只有 <mvc:annotation-driven/>配置和 <context:component-scan>..配置在我的 webmvc 配置中,因此会自动检测到 Controller 。

现在,当我导航到 /question/list 时应用程序找不到资源,我得到一个 ResourceNotFound错误。但是,如果我导航到 /question/question/list然后应用会正确加载我期望的页面。

关于为什么这是指向使用 /question/question/list 的方法的任何想法?


在此之后,我尝试将配置添加到我的 webmvc 配置中以强制所有 RequestMappings要使用参数 alwaysUseFullPath=true,我这样做如下:

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" p:order="3">
<property name="alwaysUseFullPath" value="true" />
</bean>

这一次,当我导航到/question/list 时,它仍然无法加载正确的页面,但日志显示 Spring 至少识别了正确的 Controller ,但只是找不到方法(之前它甚至没有根据 URL 找到 Controller):

2011-08-09 18:02:27,885 [http-8080-3] DEBUG org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping - Matching patterns for request [/question/list] are [/question/**/list/, /question/**/list, /question/**/, /question/**]
2011-08-09 18:02:27,886 [http-8080-3] DEBUG org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping - Mapping [/question/list] to handler 'com.tmm.enterprise.microblog.controller.QuestionController@143c423'
2011-08-09 18:02:27,886 [http-8080-3] DEBUG org.springframework.web.servlet.DispatcherServlet - Last-Modified value for [/microblog/question/list] is: -1
2011-08-09 18:02:27,886 [http-8080-3] DEBUG org.springframework.web.servlet.DispatcherServlet - DispatcherServlet with name 'microblog' processing GET request for [/microblog/question/list]
2011-08-09 18:02:27,886 [http-8080-3] DEBUG org.springframework.web.servlet.handler.SimpleMappingExceptionResolver - Resolving exception from handler [com.tmm.enterprise.microblog.controller.QuestionController@143c423]: org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMethodException: No matching handler method found for servlet request: path '/list', method 'GET', parameters map[[empty]]
2011-08-09 18:02:27,886 [http-8080-3] DEBUG org.springframework.web.servlet.handler.SimpleMappingExceptionResolver - Resolving to view 'resourceNotFound' for exception of type [org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMethodException], based on exception mapping [.NoSuchRequestHandlingMethodException]
2011-08-09 18:02:27,887 [http-8080-3] DEBUG org.springframework.web.servlet.handler.SimpleMappingExceptionResolver - Exposing Exception as model attribute 'exception'

在我看来,这是一件相对简单的事情,我试图通过使用注释将 Controller 连接到 URL 来实现,但它无法正常工作 - 有没有人遇到过这个或看到任何明显的错误我的角色?


更新

我的调查取得了一些进展。

在我的 web.xml 中,我将 servlet 映射定义如下:

<servlet-mapping>
<servlet-name>microblog</servlet-name>
<url-pattern>/question/*</url-pattern>
</servlet-mapping>

如果我删除这个 servlet 映射(我仍然有一个 servlet 映射将所有 .html 映射到同一个 servlet)并将我使用的 URL 更改为 /question/list.html然后它起作用了(我也将问题 Controller 中 @RequestMapping 方法上的 list() 注释的方法级别映射更改为 /list.html )。

总结:

  1. 我有 servlet 映射 /question到网络环境

  2. 我有另一个 /question 的映射到 QuestionController

  3. 我的列表方法 /list 有一个方法级映射

现在我不希望我的 URL 在这些情况下以 .html 结尾 - 有人知道我如何解决这个问题吗?似乎 servlet 映射删除了匹配的 /question来自 URL 的字符串(因此 /question/list 不工作,但 /question/question/list 工作)

最佳答案

设置

<url-pattern>/</url-pattern> 

对于没有 html 的 url并使用

<mvc:resources mapping="/resources/**" location="/resources/" />

对于 .css、.jpg 等资源

关于java - Spring MVC - 使用注释将 Controller 映射到 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7000008/

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