How to check String in response body with mockMvc How to check String in response body with mockMvc java java

How to check String in response body with mockMvc


You can call andReturn() and use the returned MvcResult object to get the content as a String.

See below:

MvcResult result = mockMvc.perform(post("/api/users").header("Authorization", base64ForTestUser).contentType(MediaType.APPLICATION_JSON)            .content("{\"userName\":\"testUserDetails\",\"firstName\":\"xxx\",\"lastName\":\"xxx\",\"password\":\"xxx\"}"))            .andDo(MockMvcResultHandlers.print())            .andExpect(status().isBadRequest())            .andReturn();String content = result.getResponse().getContentAsString();// do what you will 


@Sotirios Delimanolis answer do the job however I was looking for comparing strings within this mockMvc assertion

So here it is

.andExpect(content().string("\"Username already taken - please try with different username\""));

Of course my assertion fail:

java.lang.AssertionError: Response content expected:<"Username already taken - please try with different username"> but was:<"Something gone wrong">

because:

  MockHttpServletResponse:            Body = "Something gone wrong"

So this is proof that it works!


Spring MockMvc now has direct support for JSON. So you just say:

.andExpect(content().json("{'message':'ok'}"));

and unlike string comparison, it will say something like "missing field xyz" or "message Expected 'ok' got 'nok'.

This method was introduced in Spring 4.1.