从 MvcResult 获取 json 的大小

Get size of json from MvcResult

我正在测试 API 并从数据库中获取所有数据。我将回复保存为

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

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

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

如果你想获得 json 数组长度,这就是方法,

1.if 你导入 org.json.simple.JSONArray 你可以使用 JSONArray.size()

2.if 你导入 org.json.JSONArray 你可以使用 JSONArray.length()

尝试:

String content = result.getResponse().getContentAsString();

然后试试这个 one

由于您使用的是 MockMvc 而不是使用 andReturn() 返回,因此您可以使用 JSONPath 支持,例如:

  mvc.perform( MockMvcRequestBuilders
  .get("/resource")
  .accept(MediaType.APPLICATION_JSON))
  .andExpect(status().isOk())
  .andExpect(MockMvcResultMatchers.jsonPath("$.length").value(2))

假设您的回复是这样的:

{
  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 class)

Integer length = JsonPath.read(result.getResponse().getContentAsString(), "$.length()");