2

I'm testing an API and get all data from the DB. I save the response as

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

I get a json as response. I want to get the length of json array. So, if I have 2 rows in DB, I want to get 2 as a result.

Or is there maybe another way to count number of rows which are present in the DB.

Nicola Ambrosetti
  • 2,567
  • 3
  • 22
  • 38
annswerg
  • 269
  • 2
  • 7
  • 18

5 Answers5

4

Since you are using MockMvc instead of returning with andReturn() you can use the JSONPath support like:

  mvc.perform( MockMvcRequestBuilders
  .get("/resource")
  .accept(MediaType.APPLICATION_JSON))
  .andExpect(status().isOk())
  .andExpect(MockMvcResultMatchers.jsonPath("$.length").value(2))
Nicola Ambrosetti
  • 2,567
  • 3
  • 22
  • 38
3

if you want to get json array length this is the way,

1.if you import org.json.simple.JSONArray you can use JSONArray.size()

2.if you import org.json.JSONArray you can use JSONArray.length()

3

Let's say your response is something like this:

{
  result : [
     {
       "field1": "a",
       "field2": "b"
     },
     {
       "field1": "c",
       "field2": "d"
     }
  ]
}

In this case you'd use MockMvc to write assertions like this:

mvc.perform(MockMvcRequestBuilders
.get("/resource")
.accept(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.result.length()").value(2))
Rodrigo Villalba Zayas
  • 5,326
  • 2
  • 23
  • 36
1

Use com.jayway.JsonPath (you already have this class through spring-boot-starter-test )

Integer length = JsonPath.read(result.getResponse().getContentAsString(), "$.length()");
beatrice
  • 3,684
  • 5
  • 22
  • 49
0

Try:

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

and then try this one

user3506652
  • 43
  • 1
  • 2
  • 8