代码之家  ›  专栏  ›  技术社区  ›  Ori Marko

如何在springmvc测试中检查JSON响应

  •  0
  • Ori Marko  · 技术社区  · 6 年前

    我在中定义了一个servlet网站.xml,所以我在一个控制器中定义了它,只用于测试 MyResource

     @Controller 
     public class TestMyServlet {
    
         MyResource servlet;
    
         @Autowired
         AutowireCapableBeanFactory beanFac;
    
         @PostConstruct
         void init() {
             servlet = new MyResource();
             beanFac.autowireBean(servlet);
         }
    
         @RequestMapping(value = "/servlet/api/update", method = RequestMethod.POST)
         public MyResponse handle(HttpServletRequest request, HttpServletResponse response, @RequestBody String json) {     
             return servlet.update(json);
         }
    

    然后我用 MockHttpServletRequestBuilder

      MockHttpServletRequestBuilder mockHttpServletRequestBuilder = MockMvcRequestBuilders
        .post("/servlet/api/update")
        .content("{\"id\":1,\"toggle\":true}]")
        .session(httpSession)
        .contentType(MediaType.APPLICATION_JSON);
        MvcResult mvcResult = this.mockMvc.perform(mockHttpServletRequestBuilder)
                  .andDo(MockMvcResultHandlers.print())
                  .andReturn();
        ModelAndView modelAndView = mvcResult.getModelAndView().getModelMap();
        String response = mvcResult.getResponse().getContentAsString();
    

    在servlet中我不使用 ModelAndView MyResponse )即序列化为JSON响应

    我的反应 对象作为中的第二个属性 模型和视图 response 为空

    如何检查此响应中返回的JSON字符串?

    0 回复  |  直到 6 年前
        1
  •  0
  •   Shubham    6 年前

    这里有一个方法,我希望我理解的问题是正确的,

    MockMvcRequestBuilders
    .post("/servlet/api/update")
    .content("{\"id\":1,\"toggle\":true}]")
    .session(httpSession)
    .contentType(MediaType.APPLICATION_JSON)
    .andExpect(jsonPath("$[0].key",is("value")));
    

    您可以将其用于每个键和值。

    或者

    试试这个,

     MockMvcRequestBuilders
    .post("/servlet/api/update")
    .content("{\"id\":1,\"toggle\":true}]")
    .session(httpSession)
    .contentType(MediaType.APPLICATION_JSON)
    .andExpect(content().string(containsString("value")));