Spring测试和JsonPath问题

时间:2016-10-27 11:01:04

标签: spring-mvc jsonpath

我遇到了测试和json路径的问题

我只是尝试执行一个简单的测试并检查id:

的值
mockMvc.perform(get("/applications/")).andExpect(status().isOk())
       .andDo(print())
       .andExpect(content().contentType(TestUtils.APPLICATION_JSON_UTF8))
       .andExpect(jsonPath("$", hasSize(4)))
       .andExpect(jsonPath("$.id",is(1)));

但是我收到如下错误。好像我的代码应该检查id值。我不够具体,因为返回的JSON中有多个项目?任何帮助表示赞赏。感谢。

     Content type = application/json;charset=UTF-8
             Body = [{"id":1,"name":"test2"},{"id":2,"name":"test2"}]
   Forwarded URL = null
   Redirected URL = null
          Cookies = []

java.lang.AssertionError: No value at JSON path "$.id", exception: Expected to find an object with property ['id'] in path $ but found 'net.minidev.json.JSONArray'. This is not a json object according to the JsonProvider: 'com.jayway.jsonpath.spi.json.JsonSmartJsonProvider'.
    at org.springframework.test.util.JsonPathExpectationsHelper.evaluateJsonPath(JsonPathExpectationsHelper.java:258)
    at ...

2 个答案:

答案 0 :(得分:10)

我在发帖后5分钟找到答案。需要深入到阵列中。这有效:

.andExpect(jsonPath("$.[0].id",is(1)));

答案 1 :(得分:4)

您的JsonPath表达式错误,因为正文中的响应是一个数组。 根据{{​​3}},这些语法都是正确的:

"$[0][id]"
"$.[0].[id]"
"$[0].id"
"$.0.id"

这个JsonPath Specification还可以帮助您找到测试的jsonpath表达式。