无法从 START_ARRAY 令牌中反序列化“Books”的实例

Cannot deserialize instance of `Books` out of START_ARRAY token

任何人都可以帮助我,因为我真的不知道如何解决我的问题:

  1. 我只有一个简单的 GET 请求,在响应正文中包含这样的数组:
  [
    {
        "bookingid": 12
    },
    {
        "bookingid": 8
    },
    {
        "bookingid": 25
    },
    {
        "bookingid": 6
    },
    {
        "bookingid": 29
    },
    {
        "bookingid": 20
    },
    {
        "bookingid": 17
    },
    {
        "bookingid": 22
    },
    {
        "bookingid": 30
    },
    {
        "bookingid": 26
    },
    {
        "bookingid": 3
    },
    {
        "bookingid": 2
    },
    {
        "bookingid": 18
    },
    {
        "bookingid": 14
    },
    {
        "bookingid": 9
    },
    {
        "bookingid": 11
    },
    {
        "bookingid": 4
    },
    {
        "bookingid": 13
    },
    {
        "bookingid": 15
    },
    {
        "bookingid": 19
    },
    {
        "bookingid": 7
    },
    {
        "bookingid": 5
    },
    {
        "bookingid": 21
    },
    {
        "bookingid": 24
    },
    {
        "bookingid": 27
    },
    {
        "bookingid": 33
    },
    {
        "bookingid": 31
    },
    {
        "bookingid": 1
    },
    {
        "bookingid": 23
    },
    {
        "bookingid": 28
    },
    {
        "bookingid": 32
    },
    {
        "bookingid": 16
    },
    {
        "bookingid": 10
    }
]
  1. 我只想通过将 Rest Assured 与 POJO 类

    一起使用来发送 GET 请求
  2. 我的 POJO 类:

    3a。图书 class 的 List 对象的 ID 为:

package pojo;
import java.util.List;

public class Books {
    private List<Ids> bookId;
    public List<Ids> getBookId() {
        return bookId;
    }
}
  1. 第二个 class - 带有书籍 ID 的 ID
package pojo;

public class Ids {
    private String bookingid;

    public String getBookingid() {
        return bookingid;
    }
}
  1. 测试class:
import io.restassured.RestAssured;
import org.junit.jupiter.api.Test;
import static io.restassured.RestAssured.given;

public class Books {

    @Test
    public void GetBooks() {
        RestAssured.baseURI = "https://restful-booker.herokuapp.com/booking";
        given().when().get().as(Books.class);
    }
}

当我运行这个测试我有错误:

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `Books` out of START_ARRAY token
 at [Source: (String)"[{"bookingid":10},{"bookingid":21},{"bookingid":4},{"bookingid":9},{"bookingid":14},{"bookingid":2},{"bookingid":19},{"bookingid":15},{"bookingid":5},{"bookingid":3},{"bookingid":12},{"bookingid":7},{"bookingid":20},{"bookingid":1},{"bookingid":16},{"bookingid":17},{"bookingid":13},{"bookingid":6},{"bookingid":11},{"bookingid":18}]"; line: 1, column: 1]

您必须反序列化为图书 ID 列表。

这个

 given().when().get().as(Books.class);

应该是

given().when().get().as(Ids[].class);

我在这里看到很多问题:

  1. 你测试class,最外层的POJO都叫Books。您要反序列化到哪一个?

  2. 在输入 JSON 中,键名为 bookingid,在代码中为 bookingId(注意大写 I

  3. 为什么你有一个外部 class Books(作为 POJO)?从 JSON 的格式来看,反序列化为 Ids 的数组似乎更合乎逻辑,因为这代表一个 ID,所以它可能应该命名为 Id.