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的替代方法,但我没有做得更深入。