[英]Spring MVC and RequestMapping with filter
我遇到了网址映射问题,并认为有人可能会帮助我:-)
我的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)方法而不通过Filter。 我的@RequestMapping不是/qwert/request.do,请求如何最终到达servlet?
有没有人知道如何解决这个问题,而不会将我的dispatcherServlet映射更改为类似* .do并进行相应的其他更改。
我希望我的应用程序在localhost下提供请求:port / MyApp / qwert / request而不是localhost:port / MyApp / qwert / request.whatever我无法将过滤器映射更改为/ *,因为还有其他方法不需要过滤干预。
谢谢
更新1:
是的,我尝试引入过滤器的url-pattern,如/qwert/request.*,但在这种情况下,过滤器不会拦截任何请求。 localhost:port / MyApp / qwert / request还是localhost:port / MyApp / qwert / request.whatever(是普通呼叫者应该使用的第一个)
解
最后我发现了问题所在,@ Jhonathan指出了我正确的方向
我不得不定义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?
Spring默认采取
/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来源:
setUseDefaultSuffixPattern
public void setUseDefaultSuffixPattern(boolean useDefaultSuffixPattern)
设置是否使用默认后缀模式注册路径:即“/ users”是否应注册为“/ users。 ”和“/ users /”。 默认为“true”。 如果您打算严格解释@RequestMapping路径,请关闭此约定。 请注意,在任何情况下,包含“.xxx”后缀或以“/”结尾的路径都不会使用默认后缀模式进行转换。*
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.