如何使用Spring MockMVC将JSON编码为请求参数

时间:2015-09-23 03:58:13

标签: java json spring spring-mvc 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了解编码参数我缺少什么?

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

我相信你的JSON被编码两次,因此控制器接收一个仍然被编码的字符串(在仅被解码一次之后)。

JavaDoc for MockMvcRequestBuilders说明了get的第一个参数:

  

urlTemplate - 一个网址模板;生成的URL将被编码

因此,我认为您不需要自己对JSON进行编码,以下内容应该有效:

mockMvc.perform(MockMvcRequestBuilders.get("/Node?json={json}", sampleJson))
.andExpect(status().isOk());