You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring测试新手提问:能否将MockMvc返回结果转为Java Map?

当然可以!把MockMvc响应转成Java Map的方法

作为Spring测试的新手,你完全可以把MockMvc执行请求后的返回结果转换成Java Map,甚至是更复杂的集合类型。下面我结合你的测试代码,一步步教你实现:

核心思路

MockMvc允许你通过.andReturn()获取请求的完整结果(MvcResult),然后提取出响应体的JSON字符串,再用Jackson的ObjectMapper将JSON解析成Java Map(或List<Map>,因为你的返回是一个数组)。

改造后的完整测试代码

@Test
public void readBookmarks() throws Exception {
    // 1. 执行请求并获取MvcResult对象
    MvcResult mvcResult = mockMvc.perform(get("/" + userName + "/bookmarks"))
            .andExpect(status().isOk())
            .andExpect(content().contentType(contentType))
            .andExpect(jsonPath("$", hasSize(2)))
            .andExpect(jsonPath("$[0].id", is(this.bookmarkList.get(0).getId().intValue())))
            .andExpect(jsonPath("$[0].uri", is("http://bookmark.com/1/" + userName)))
            .andReturn(); // 关键一步:获取完整的请求结果

    // 2. 从MvcResult中提取响应体的JSON字符串
    String responseJson = mvcResult.getResponse().getContentAsString();

    // 3. 用Jackson的ObjectMapper将JSON转成List<Map>(因为返回的是数组)
    ObjectMapper objectMapper = new ObjectMapper();
    List<Map<String, Object>> bookmarkMapList = objectMapper.readValue(
        responseJson,
        new TypeReference<List<Map<String, Object>>>() {}
    );

    // 4. 现在就可以直接操作Map来做验证或其他逻辑了
    Map<String, Object> firstBookmark = bookmarkMapList.get(0);
    assert firstBookmark.get("id").equals(this.bookmarkList.get(0).getId().intValue());
    assert firstBookmark.get("uri").equals("http://bookmark.com/1/" + userName);
}

额外优化提示

  • 如果你用的是Spring Boot测试,可以直接注入ObjectMapper,不用手动new,更符合Spring的最佳实践:
    @Autowired
    private ObjectMapper objectMapper;
    
  • 如果你的接口返回的是单个JSON对象(不是数组),直接转成Map<String, Object>即可,把TypeReference换成new TypeReference<Map<String, Object>>() {}。
  • 确保你的项目里已经包含Jackson依赖(Spring Boot的spring-boot-starter-web默认已经包含了,所以不用额外加)。

这样你就能轻松把MockMvc的响应转换成Java Map,方便后续的自定义验证或逻辑处理啦!

内容的提问来源于stack exchange,提问作者JavaCodeNet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:24:47