Spring MVC controller Test - print the result JSON String
73,512
Solution 1
Try this code:
resultActions.andDo(MockMvcResultHandlers.print());
Solution 2
The trick is to use andReturn()
MvcResult result = springMvc.perform(MockMvcRequestBuilders
.get("/jobsdetails/2").accept(MediaType.APPLICATION_JSON)).andReturn();
String content = result.getResponse().getContentAsString();
Solution 3
You can enable printing response of each test method when setting up the MockMvc
instance.
springMvc = MockMvcBuilders.webAppContextSetup(wContext)
.alwaysDo(MockMvcResultHandlers.print())
.build();
Notice the .alwaysDo(MockMvcResultHandlers.print())
part of the above code. This way you can avoid applying print handler for each test method.
Solution 4
For me it worked when I used the code below:
ResultActions result =
this.mockMvc.perform(post(resource).sessionAttr(Constants.SESSION_USER, user).param("parameter", "parameterValue"))
.andExpect(status().isOk());
String content = result.andReturn().getResponse().getContentAsString();
And it worked !! :D
Hope I can help the other with my answer
Comments
-
iCode almost 2 years
Hi I have a Spring mvc controller
@RequestMapping(value = "/jobsdetails/{userId}", method = RequestMethod.GET) @ResponseBody public List<Jobs> jobsDetails(@PathVariable Integer userId,HttpServletResponse response) throws IOException { try { Map<String, Object> queryParams=new LinkedHashMap<String, Object>(); queryParams.put("userId", userId); jobs=jobsService.findByNamedQuery("findJobsByUserId", queryParams); } catch(Exception e) { logger.debug(e.getMessage()); response.sendError(HttpServletResponse.SC_BAD_REQUEST); } return jobs; }
I want to see how the JSON String will looks like when I run this. I wrote this test case
@RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration("classpath:webapptest") @ContextConfiguration(locations = {"classpath:test-applicationcontext.xml"}) public class FindJobsControllerTest { private MockMvc springMvc; @Autowired WebApplicationContext wContext; @Before public void init() throws Exception { springMvc = MockMvcBuilders.webAppContextSetup(wContext).build(); } @Test public void documentsPollingTest() throws Exception { ResultActions resultActions = springMvc.perform(MockMvcRequestBuilders.get("/jobsdetails/2").accept(MediaType.APPLICATION_JSON)); System.out.println(/* Print the JSON String */); //How ? } }
How to get the JSON string?
I am using Spring 3, codehause Jackson 1.8.4
-
jax over 10 yearsActually you can get the JSON response from the controller using .andReturn()
-
funkygono over 10 yearsOh yes, that's true, I just saw this in your answer. I didn't know Spring offered so much mocks, that's very great.
-
delucasvb almost 7 yearsThank you for not just using
print()
but adding its class name, unlike many other search results!