web-dev-qa-db-ja.com

Springテストと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 ...
8
Mike

投稿してから5分後に答えがわかりました。アレイをさらに深く掘り下げる必要がありました。これは機能します:

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

本文の応答が配列であるため、JsonPath式が間違っています。 JsonPath仕様 によると、この構文はすべて正しいです。

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

この 便利なページ は、テストのjsonpath式を見つけるのにも役立ちます。

5
jchrbrt