有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaSpringMVC控制器测试打印结果JSON字符串

嗨,我有一个Spring mvc控制器

@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;
}

我想看看运行这个程序时JSON字符串的样子。我写了这个测试用例

@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 ?
    }
}

如何获取JSON字符串

我使用的是Spring3,codehause Jackson 1.8.4


共 (5) 个答案

  1. # 1 楼答案

    对我来说,当我使用下面的代码时,它起了作用:

    ResultActions result =
         this.mockMvc.perform(post(resource).sessionAttr(Constants.SESSION_USER, user).param("parameter", "parameterValue"))
            .andExpect(status().isOk());
    String content = result.andReturn().getResponse().getContentAsString();
    

    成功了!!:D

    希望我能帮助对方回答我的问题

  2. # 2 楼答案

    您可以在设置MockMvc实例时启用每个测试方法的打印响应

    springMvc = MockMvcBuilders.webAppContextSetup(wContext)
                   .alwaysDo(MockMvcResultHandlers.print())
                   .build();
    

    注意上面代码的.alwaysDo(MockMvcResultHandlers.print())部分。这样可以避免为每个测试方法应用打印处理程序

  3. # 3 楼答案

    如果您正在测试控制器,则不会得到JSon结果,该结果由视图返回。您是否可以测试视图(或者测试控制器,然后再测试视图),或者启动servlet contrainer(例如使用Cargo),并在HTTP级别进行测试,这是检查实际情况的好方法

  4. # 4 楼答案

    诀窍是使用andReturn()

    MvcResult result = springMvc.perform(MockMvcRequestBuilders
             .get("/jobsdetails/2").accept(MediaType.APPLICATION_JSON)).andReturn();
    
    String content = result.getResponse().getContentAsString();
    
  5. # 5 楼答案

    请尝试以下代码:

    resultActions.andDo(MockMvcResultHandlers.print());