gpt4 book ai didi

java - 由于输入结束, jackson 无法映射空数组,没有内容可映射到对象

转载 作者:太空宇宙 更新时间:2023-11-04 08:11:17 25 4
gpt4 key购买 nike

我向 api 发送查询,并使用 Jackson 将 json 结果映射到我的类。当我得到一些结果时,它工作正常,但是当没有结果时,它会失败并显示

java.io.EOFException: No content to map to Object due to end of input
at org.codehaus.jackson.map.ObjectMapper._initForReading(ObjectMapper.java:2766)
at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2709)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1854)
at com.jthink.discogs.query.DiscogsServerQuery.mapQuery(DiscogsServerQuery.java:382)
at com.jthink.discogs.query.SearchQuery.mapQuery(SearchQuery.java:37)*

但问题是 api 根本没有返回任何内容,所以我不明白为什么它会失败。

这是查询:

http://api.discogs.com/database/search?page=1&type=release&release_title=nude+and+rude+the+best+of+iggy+pop

这就是我得到的结果

{
"pagination": {
"per_page": 50,
"pages": 1,
"page": 1,
"urls": {},
"items": 0
},
"results": []
}

这是我试图映射到的顶级对象

public class Search
{
private Pagination pagination;
private Result[] results;

public Pagination getPagination() {
return pagination;
}

public void setPagination(Pagination pagination) {
this.pagination = pagination;
}

public Result[] getResults() {
return results;
}

public void setResults(Result[] results) {
this.results = results;
}
}

我猜测问题与返回的结果数组为空有关,但看不出我做错了什么

编辑:下面的评论是正确的,尽管我通常会收到

{
"pagination": {
"per_page": 50,
"pages": 1,
"page": 1,
"urls": {},
"items": 0
},
"results": []
}

在这些情况下没有问题,但有时我似乎只是得到一个空字符串。现在我想知道问题是否在于我如何从输入流读取

 if (responseCode == HttpURLConnection.HTTP_OK)
InputStreamReader in= new InputStreamReader(uc.getInputStream());
BufferedReader br= new BufferedReader(in);
while(br.ready())
{
String next = br.readLine();
sb.append(next);
}
return sb.toString();
}

虽然我在收到响应代码之前不会读取内容,但是否有可能我第一次调用 br.ready() 时在它准备好之前调用它,因此我不读取输入

编辑2:

将上面的代码更改为简单

        String line;
while ((line = br.readLine()) != null)
{
sb.append(line);
}

解决了问题。

最佳答案

虽然已经有一个解决方案,但我建议您首先创建 JsonParser ,然后查看是否有任何输入,如果有,则使用数据绑定(bind)。这比逐行读取输入、构造字符串,然后将其交给解析器要快得多。

JsonParser jp = jsonFactory.createJsonParser(uc.getInputStream());
Search result = null;
if (jp.nextToken() != null) { // end-of-input
result = jp.readValueAs(Search.class);
}
jp.close();
return result;

关于java - 由于输入结束, jackson 无法映射空数组,没有内容可映射到对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11189882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com