我已经尝试了几个小时来编写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了解编码参数我缺少什么?
感谢您的帮助
答案 0 :(得分:2)
我相信你的JSON被编码两次,因此控制器接收一个仍然被编码的字符串(在仅被解码一次之后)。
JavaDoc for MockMvcRequestBuilders
说明了get
的第一个参数:
urlTemplate - 一个网址模板;生成的URL将被编码
因此,我认为您不需要自己对JSON进行编码,以下内容应该有效:
mockMvc.perform(MockMvcRequestBuilders.get("/Node?json={json}", sampleJson))
.andExpect(status().isOk());