如何使用 Spring MockMVC 将 JSON 编码为请求参数
How to encode JSON as request parameter using Spring MockMVC
几个小时以来,我一直在尝试将 JSON 编码为我正在使用 Spring 的 MockMVC 编写的测试的请求参数,但没有成功。
我的测试看起来像
@Before
public void setUp() {
mockMvc = MockMvcBuilders.standaloneSetup(new TestController())
.build();
}
@Test
public void shouldReturnJSONGeneratedByView() throws Exception {
String sampleJson = "{\"key\":\"value\"}";
String json = UriComponentsBuilder.newInstance()
.path(sampleJson)
.build().encode().toUriString();
mockMvc.perform(MockMvcRequestBuilders.get("/Node?json="+json))
.andExpect(status().isOk());
}
但是到达我的控制器的字符串仍然是编码的(“%7B%22key%22:%22value%22%7D”),因此不能反序列化为 JSON。
我缺少什么来Spring理解编码参数?
感谢您的帮助
我相信您的 JSON 被编码了两次,因此控制器收到一个仍然编码的字符串(仅解码一次后)。
JavaDoc for MockMvcRequestBuilders
对 get
的第一个参数声明如下:
urlTemplate - a URL template; the resulting URL will be encoded
因此我认为您不需要自己对 JSON 进行编码,下面的方法应该可行:
mockMvc.perform(MockMvcRequestBuilders.get("/Node?json={json}", sampleJson))
.andExpect(status().isOk());
几个小时以来,我一直在尝试将 JSON 编码为我正在使用 Spring 的 MockMVC 编写的测试的请求参数,但没有成功。
我的测试看起来像
@Before
public void setUp() {
mockMvc = MockMvcBuilders.standaloneSetup(new TestController())
.build();
}
@Test
public void shouldReturnJSONGeneratedByView() throws Exception {
String sampleJson = "{\"key\":\"value\"}";
String json = UriComponentsBuilder.newInstance()
.path(sampleJson)
.build().encode().toUriString();
mockMvc.perform(MockMvcRequestBuilders.get("/Node?json="+json))
.andExpect(status().isOk());
}
但是到达我的控制器的字符串仍然是编码的(“%7B%22key%22:%22value%22%7D”),因此不能反序列化为 JSON。
我缺少什么来Spring理解编码参数?
感谢您的帮助
我相信您的 JSON 被编码了两次,因此控制器收到一个仍然编码的字符串(仅解码一次后)。
JavaDoc for MockMvcRequestBuilders
对 get
的第一个参数声明如下:
urlTemplate - a URL template; the resulting URL will be encoded
因此我认为您不需要自己对 JSON 进行编码,下面的方法应该可行:
mockMvc.perform(MockMvcRequestBuilders.get("/Node?json={json}", sampleJson))
.andExpect(status().isOk());