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

Share:
73,512
iCode
Author by

iCode

Java Programmer

Updated on July 05, 2022

Comments

  • iCode
    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
    jax over 10 years
    Actually you can get the JSON response from the controller using .andReturn()
  • funkygono
    funkygono over 10 years
    Oh 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
    delucasvb almost 7 years
    Thank you for not just using print() but adding its class name, unlike many other search results!