如何在Spring MVC测试中检查JSON响应 [英] How to check JSON response in Spring MVC test

查看:160
本文介绍了如何在Spring MVC测试中检查JSON响应的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在web.xml中定义了一个servlet,因此我在Controller中定义了它,仅用于测试MyResource:

I have a servlet defined in web.xml, so I defined it inside a Controller for testing only for 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对其进行测试:

Then I test it using 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,只是返回一个序列化为JSON响应的POJO对象(MyResponse)

In servlet I don't use ModelAndView, just returning a POJO object (MyResponse) that is serialize to JSON response

我看到MyResponse对象是ModelAndView中的第二个属性,但是response为空

I'm seeing MyResponse object as a second attribute in ModelAndView, but response is null

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

How can I check JSON string returned in this response?

推荐答案

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

There is one way here, i hope i understood the question correct ,

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

andExpect(jsonPath("$ [0] .key",is("value")))

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

you can use this for each key and value.

尝试一下

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

这篇关于如何在Spring MVC测试中检查JSON响应的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆