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

标签 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());
}

但是到达我的 Controller 的字符串仍然经过编码(“%7B%22key%22:%22value%22%7D”),因此无法反序列化为 JSON。

为了让 Spring 理解编码参数,我缺少什么?

感谢您的帮助

最佳答案

我相信您的 JSON 被编码了两次,因此 Controller 收到一个仍然编码的字符串(仅解码一次后)。

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());

关于java - 如何使用 Spring MockMVC 将 JSON 编码为请求参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32730707/

相关文章:

javascript - 表格没有使用谷歌图表的列

c# - 在 Aspose.Words LINQ 报告引擎中构建报告的动态对象

security - Grails项目登录插件

java - Map.merge 的可变版本

java - 将 String 解析为 BigDecimal 时出现 NumberFormatException

javascript - 获取单个记录输出的内容多于记录内容,并且 json.parse 未记录正确的数据

java - 如何在 jsp View 中加载 extjs 5 应用程序 - Spring MVC?

java - ArrayBlockingQueue,如果在添加元素时队列已满,则删除队列头

java - JButton 不返回正确的文本值

java - Spring Data Repository Autowiring 失败