這是我第一次使用jackson/消費apis/httpclient。我收到此錯誤 com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type java.util.ArrayList<WallHaven>from Object value (token JsonToken.START_OBJECT) 。我嘗試使用的 api 是https://wallhaven.cc/help/api
try {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.GET()
.uri(URI.create("https://wallhaven.cc/api/v1/w/pkgkkp"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
ObjectMapper mapper = new ObjectMapper();
List<WallHaven> posts = mapper.readValue(response.body(), new TypeReference<List<WallHaven>>() {
});
posts.forEach(System.out::println);
} catch (Exception e) {
e.printStackTrace();
}
api json 格式為https://pastebin.com/tbSaVJ1T
這是我的 WallHaven 課程
public class WallHaven {
public Data data;
public WallHaven(Data data) {
this.data = data;
}
public WallHaven() {
}
@Override
public String toString() {
return "WallHaven{"
"data=" data.getPath()
'}';
}
}
資料包含所有其他類/變數
uj5u.com熱心網友回復:
發生這種情況是因為您試圖將 Json物件反序列化為Listjava 中的 a。錯誤訊息通過說起始字符 ( JsonToken.START_OBJECT) 是 json 物件而不是 json 陣列的開頭來解釋它,因此您不能將其直接反序列化為 a List,而應將其反序列化為物件。
嘗試改變:
List<WallHaven> posts = mapper.readValue(response.body(), new TypeReference<List<WallHaven>>())
進入
WallHaven post = mapper.readValue(response.body(), new TypeReference<WallHaven>())
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/422252.html
標籤:
上一篇:C 客戶端套接字發送原始檔案和檔案大小,Java客戶端總是多得到8個位元組。即使強制限制為-8位元組檔案也不可讀
