首页 > 解决方案 > 无法从数组值反序列化类型为“Covid”的值(令牌“JsonToken.START_ARRAY”)

问题描述

主要方法

public static void apiRequest(String country){
    HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://covid-19-data.p.rapidapi.com/report/country/name?date=2020-04-01&name="+country))
            .header("x-rapidapi-host", "covid-19-data.p.rapidapi.com")
            .header("x-rapidapi-key", "e7d0ae3dfcmshb4765a4bcd9edc9p198994jsn1a1b1d5fa50d")
            .method("GET", HttpRequest.BodyPublishers.noBody())
            .build();
    HttpResponse<String> response = null;
    try {
        response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    System.out.println(response.body());

    ObjectMapper oM = new ObjectMapper();

    oM.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

    try {
        Covid covid = oM.readValue(response.body(), Covid.class);
        System.out.println(covid);
    } catch (JsonProcessingException e) {
        e.printStackTrace();
    }
}

这里是整个响应字符串: [{"country":"Austria","provinces":[{"province":"Austria","confirmed":10711,"recovered":1436,"deaths":146,"active ":9129}],"纬度":47.516231,"经度":14.550072,"日期":"2020-04-01"}]

我只想要 Covid 类的某些值

Covid类

public class Covid {
String province;
int active;

public Covid(String province, int active) {
    this.province = province;
    this.active = active;
}

public String getProvince() {
    return province;
}

public void setProvince(String province) {
    this.province = province;
}

public int getActive() {
    return active;
}

public void setActive(int active) {
    this.active = active;
}
}

我的错误:com.fasterxml.jackson.databind.exc.MismatchedInputException:无法Covid从数组值(令牌JsonToken.START_ARRAY)反序列化类型值

请帮我

标签: javajsonobjectmapper

解决方案


API 结果是一个数组,您正在尝试读取单个对象值。调用时确保读取集合或数组oM.readValue


推荐阅读