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": []
}
これがImがマップしようとしているトップレベルのオブジェクトです
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;
}
}
問題を推測しているのは、返される結果の配列が空白になっていることと関係がありますが、Imが間違っていることを確認できません
編集:私は通常受け取りますが、以下のコメントは正しかったです
{
"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);
}
問題を解決しました。