我对url映射有问题,想有人能帮我:-)
我的spring mvc应用程序有一个dispatcherservler映射,如下所示:

<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

然后我有一个带有如下注释的方法的控制器servlet:
MyServlet {
....myMethod
@RequestMapping(value = "/qwert/request", method = RequestMethod.POST)

最后,我有一个带映射的delegatingfilterproxy:
<filter-mapping>
    <filter-name>myFilter</filter-name>
    <url-pattern>/qwert/request</url-pattern>
</filter-mapping>

其目标是拦截指向上述myservlet方法的所有请求。
对于典型的请求localhost:port/myapp/qwert/request,应用程序运行良好,这意味着过滤器正在拦截请求并执行其业务。
问题在于,像这样的localhost:port/myapp/qwert/request.do请求直接进入servlet(myservlet)方法而不经过过滤器。我的@requestmapping不是/qwert/request.do,请求如何最终到达servlet?
是否有人知道如何解决这个问题,而不将我的dispatcherservlet映射更改为类似*.do的内容,并相应地进行其他更改。
我希望我的应用程序在localhost:port/myapp/qwert/request下服务请求,而不是在localhost:port/myapp/qwert/request下服务请求。无论如何,我都无法将筛选器映射更改为/*因为还有其他方法不需要筛选器干预。
谢谢
更新1:
是的,我试图引入过滤器的url模式,比如/qwert/request.*但是在这种情况下,过滤器不会拦截任何请求。localhost:port/myapp/qwert/request和localhost:port/myapp/qwert/request.whatever都不是(普通调用方应该使用的第一个)
解决方案
“最后我发现了问题所在,”乔纳坦指了指我正确的方向。
我必须定义一个requestMappingHandlerMapping而不是DefaultAnnotationHandlerMapping
@Bean
public RequestMappingHandlerMapping requestMappingHandlerMapping() {
    RequestMappingHandlerMapping mapping = new RequestMappingHandlerMapping();
    // no dot like names will be matched
    mapping.setUseSuffixPatternMatch(false);
    // no trailing slash will be matched
    mapping.setUseTrailingSlashMatch(false);
    return mapping;
}

这就是诀窍所在,现在我可以从内部看到,模式不会像我在开始提到的那样处理“错误”请求。
谢谢大家

最佳答案

第一个问题
我的@requestmapping不是/qwert/request.do,请求如何最终到达servlet?
默认为春季

/qwert/request.do
/qwert/request.whatever
/qwert/request.*

喜欢
/qwert/request

因此,您的@RequestMapping(value = "/qwert/request", method = RequestMethod.POST)接受请求。你的变化
用于更改此默认选项的DefaultAnnotationHandlerMapping:
 <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
     <property name="useDefaultSuffixPattern" value="false" />
 </bean>

来自Spring源:
setUseDefaultSuffix模式
public void setUseDefaultSubfixPattern(布尔useDefaultSubfixPattern)
设置是否也使用默认后缀模式注册路径:即“/users”是否也应注册为“/users.”和“/users/”。
默认值为“true”。如果要严格解释@requestmapping路径,请关闭此约定。
请注意,包含“.xxx”后缀或以“/”结尾的路径在任何情况下都不会使用默认后缀模式进行转换。*

07-28 13:33