spring4.1.1,mockmvc,并且不希望HTTP GET请求的URL编码


问题内容

在测试中使用MockMVC,我需要测试一个已经被URL编码的GET URL:

http://host:port/app/controller/[ALREADY URL ENCODED]

编码:

mockmvc.perform(get("/controller/[ALREADY URL ENCODED]")

但是,在日志中,我看到该URL在进入适当的控制器方法之前已再次进行url编码。有没有一种方法可以防止Spring
Mockmvc对URL进行编码?也许在测试中禁用url编码?

字符串“ [ALREADY URL ENCODED]”的真实示例:

MEUwQzBBMD8wPTAJBgUrDgMCGgUABBQ%2Fm36Fj2BE19VBYXRO62zrgIYp0gQVAQazEyvlq22wsMBkRyAeaUiZ%2BhTUAgMGJbQ%3D

这将在控制器看到URL之前再次对其进行编码。

这是从日志中提取的(该字符串已再次经过url编码)

xxxxx [main] DEBUG [o.s.t.w.s.TestDispatcherServlet]  DispatcherServlet with name '' processing GET request for [/app/controller/MEUwQzBBMD8wPTAJBgUrDgMCGgUABBQ%252Fm36Fj2BE19VBYXRO62zrgIYp0gQVAQazEyvlq22wsMBkRyAeaUiZ%252BhTUAgMGJbQ%253D]

请注意,如果我使用CURL进行调用,那么spring框架不会执行url编码,并且控制器会获取发送过来的内容。但是,mockmvc会在到达适当的控制器方法之前进行编码。

curl -X GET http:host:port/app/controller/[ALREADY URL ENCODED]

谢谢。


问题答案:

对我有用的是MockMvcRequestBuilders.get(new URI([ENCODED_URL_STRING]))

我猜还有使用MockMvcRequestBuilders.get(String urlTemplate,Object...urlVariables)适当的urlVariables的替代方法,但我没有做得更深入。