1

我已经尝试了几个小时将 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 理解编码参数,我缺少什么?

谢谢你的帮助

4

1 回答 1

3

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

JavaDoc forMockMvcRequestBuilders说明了关于第一个参数的以下内容get

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

因此,我认为您不需要自己编码 JSON,以下应该可以工作:

mockMvc.perform(MockMvcRequestBuilders.get("/Node?json={json}", sampleJson))
.andExpect(status().isOk());
于 2015-09-23T19:47:25.263 回答