Как проверить ответ JSON в тесте Spring MVC - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть сервлет, определенный в web.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();

В сервлете я не использую ModelAndView, просто возвращаю объект POJO (MyResponse), который сериализуется в ответ JSON

Я вижу MyResponse объект как второй атрибутв ModelAndView, но response равно нулю

Как проверить строку JSON, возвращенную в этом ответе?

1 Ответ

0 голосов
/ 26 февраля 2019

Есть один способ, надеюсь, я правильно понял вопрос:

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")))

Вы можете использовать это для каждой клавиши и значения.

Или

Попробуйте это,

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