- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在 url 映射方面遇到问题,我想有人可以帮助我 :-)
我的 Spring MVC 应用程序有一个 dispatcherServler 的映射如下:
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
然后我有一个 Controller 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.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 源代码:
设置使用默认后缀模式
public void setUseDefaultSuffixPattern(boolean useDefaultSuffixPattern)
设置是否也使用默认后缀模式注册路径:即“/users”是否也应注册为“/users.”和“/users/”。默认为“真”。如果您打算严格解释您的 @RequestMapping 路径,请关闭此约定。请注意,包含“.xxx”后缀或以“/”结尾的路径在任何情况下都不会使用默认后缀模式进行转换。*
关于java - 带过滤器的 Spring MVC 和 RequestMapping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12709384/
如何在Spring中忽略类级别@RequestMapping("/home")并直接调用方法级别@RequestMapping("/users")? @Controller @RequestMappi
让我们假设以下 Controller : @RestController public class MyController { @RequestMapping(method = GET, pat
我在使用 Spring Boot 时遇到了一些问题。 当我使用 @RequestMapping(value = "/home") 时,一切正常。但是当我使用 @RequestMapping(name
我正在尝试创建一个restful API(使用Spring Boot v2.0.0.Release),我希望有一个端点,但我希望有两种可能的用途: GET /time - outputs curren
我已经被这个错误困扰了几个小时。。我的pom.xml。应用程序未启动。所有的Spring框架依赖于相同的版本,但仍然得到相同的错误。。更新。MVN依赖的结果:树。看起来这里一切都很好。
我有以下三个 REST API 方法: @RequestMapping(value = "/{name1}", method = RequestMethod.GET) public Objec
我正在尝试为 spring @RequestMapping 注释创建值属性以像这样映射 url /educationDistrict/308/action/resetAddressesForYear/
如何定义 @RequestMapping 方法来显式允许匿名(未经授权)访问? 以下方法不起作用,总是收到 401 Unauthorized: @RequestMapping("/test") @Se
想象一下我有一个像这样的 Spring MVC Controller : @Controller @RequestMapping("/base-url") public class MyControl
如何处理除资源映射文件夹之外的所有 URL 请求? 在这个例子中,我处理了所有路径(这就是我想要的),但现在即使我设置也无法访问资源文件夹 里面dispatcher-servlet.xml @Req
我需要有一个/jsp/login 和/jsp/login?error 的映射 请注意,我无法使用/jsp/login?error=someval 然后检查参数是否具有该值或默认值。在这种情况下,不允许
让 Tomcat 启动并自动显示 index.jsp 文件的内容没有任何问题。然而,当我尝试使用 @Controller 和 @RequestMapping 时,我遇到了错误。这是我的 Control
我有以下文件夹结构: WEB-INF/ -- 页数/ ----home.jsp ----admin.jsp ----admin2.jsp ----admin3.jsp 我有以下 Controller
我正在使用 Spring Boot,并尝试显示 get 请求。我正在使用 2 个类:Greeting.java 和 GreetingController: package greeting;
我正在尝试使用 @RequestMapping与 consumes -元素。阅读API-document它适用于 Content-Type - 请求头。但是,使用 @RequestMapping(co
我已经为此打开了一个问题 here.但我也想问一下 stackoverflow 的人。 @Controller @RequestMapping("/xxx") public class MyContr
我想在我的 Spring Boot 应用程序中创建一个自定义注释,它总是向我的类级别 RequestMapping 路径 添加一个前缀。 我的 Controller : import com.sage
鉴于下面的@Controller,即使我向 webApp 发送 Get 请求, Controller 也会运行 homePage 方法。 @RestController @RequestMapping
我正在尝试设置 Controller ,但不幸的是无法查看输出...一切都正确渲染。当我访问 http://localhost:8080/CMT/content/edit 时,我得到一个 404 页面
在我的 Spring Controller 中,我创建了 3 个方法。方法 1 和方法 2 工作正常,但方法 3 给我带来问题 问题: org.springframework.web.servlet.
我是一名优秀的程序员,十分优秀!