我试图让我的Spring 4应用程序允许带有转义斜杠的结束的路径参数。
我@RequestMapping
得到的是:
@RequestMapping("/{externalSystemId}/{externalRequestId}/events")
我正在呼叫的网址是/dummy/ab%2F/events
。所以" externalRequestId"是具有尾随编码斜杠的那个。
我已经到了正确调用处理程序的位置,以及路径段中间的转义斜线工作的地方 - 例如/dummy/ab%2Fcd/events
,但不是最后。
到目前为止我做了什么:
UrlPathHelper
的自定义扩展程序将getServletPath
替换为只返回request.getRequestURI()
的{{1}} mvc:path-matching
mvc:annotation-driven
中的此UrlPathHelper
我完全不知道接下来要去哪里。我甚至已经通过Spring和Tomcat进行调试来尝试解决它,我很难过。它看起来像,因为UrlPathHelper.getPathWithinServletMapping()
正在调用request.getPathInfo()
,而这正在返回剥离了%2F的路径。而这反过来是因为Tomcat中的其他地方 - 我现在已经丢失了窗口 - 它已将%2F解码为/,然后替换了" //"现在出现了" /"代替。
这感觉它应该相对简单,所以我错过了什么?
我已经在Tomcat 7和Tomcat 8以及不同版本的Spring 4上尝试过它 - 目前在4.3.14上。
答案 0 :(得分:1)
问题解决了。
我所拥有的SlashFriendlyUrlPathHelper
是UrlPathHelper
的扩展名导致问题,因为我的webapp 不 Root webapp。删除它,但保持所有其他更改,并开始正常工作。