spring 4.1.1,mockmvc并且不希望HTTP GET请求的url编码

Kha*_*111 7 java spring spring-mvc mockmvc

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

http://host:port/app/controller/[ALREADY URL ENCODED]
Run Code Online (Sandbox Code Playgroud)

代码:

mockmvc.perform(get("/controller/[ALREADY URL ENCODED]")
Run Code Online (Sandbox Code Playgroud)

但是在日志中我看到URL在到达适当的控制器方法之前已经被再次进行了url编码.有没有办法可以阻止spring mockmvc进行url编码?也许在测试中禁用url编码?

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

MEUwQzBBMD8wPTAJBgUrDgMCGgUABBQ%2Fm36Fj2BE19VBYXRO62zrgIYp0gQVAQazEyvlq22wsMBkRyAeaUiZ%2BhTUAgMGJbQ%3D
Run Code Online (Sandbox Code Playgroud)

这会在控制器看到之前再次对URL进行编码.

这是来自日志(该字符串已被重新编码)

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

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

curl -X GET http:host:port/app/controller/[ALREADY URL ENCODED]
Run Code Online (Sandbox Code Playgroud)

谢谢.

小智 6

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

我猜有另外一种方法MockMvcRequestBuilders.get(String urlTemplate, Object... urlVariables),使用适当的urlVariables,但我没有更深入.