猿问

从 MvcResult 获取 json 的大小

我正在测试一个 API 并从数据库中获取所有数据。我将响应保存为

MvcResult result = mockMvc.perform(..some code..).andReturn();

我得到一个 json 作为响应。我想获取 json 数组的长度。所以,如果我在数据库中有 2 行,我想得到 2 作为结果。

或者是否有另一种方法可以计算数据库中存在的行数。


阿晨1998
浏览 157回答 5
5回答

胡子哥哥

由于您使用的是 MockMvc 而不是返回 withandReturn()您可以使用 JSONPath 支持,例如:  mvc.perform( MockMvcRequestBuilders   .get("/resource")   .accept(MediaType.APPLICATION_JSON))   .andExpect(status().isOk())   .andExpect(MockMvcResultMatchers.jsonPath("$.length").value(2))

饮歌长啸

如果你想获得 json 数组长度,就是这样,1.如果你导入org.json.simple.JSONArray你可以使用JSONArray.size()2.如果你导入org.json.JSONArray你可以使用JSONArray.length()

拉风的咖菲猫

假设您的回应是这样的:{  result : [     {       "field1": "a",       "field2": "b"     },     {       "field1": "c",       "field2": "d"     }  ]}在这种情况下,您将使用 MockMvc 编写如下断言:mvc.perform(MockMvcRequestBuilders.get("/resource").accept(MediaType.APPLICATION_JSON)).andExpect(MockMvcResultMatchers.status().isOk()).andExpect(MockMvcResultMatchers.jsonPath("$.result.length()").value(2))

翻阅古今

使用com.jayway.JsonPath(你已经通过 spring-boot-starter-test 拥有了这个类)Integer length = JsonPath.read(result.getResponse().getContentAsString(), "$.length()");

哔哔one

尝试:String content = result.getResponse().getContentAsString();
随时随地看视频慕课网APP

相关分类

Java
我要回答