jackson Nichtumsetzung der Karte leer-array Ohne Inhalt anzeigen zu widersprechen wegen Ende der Eingabe
Sende ich eine Abfrage, um eine api und ordnen Sie die json-Ergebnisse meiner Klassen mit Jackson.
Wenn ich einige Ergebnisse es funktioniert gut, aber wenn es keine Ergebnisse schlägt er mit
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)*
Aber die Sache ist die api ist keine Rückkehr gar nichts, also ich sehe nicht, warum es nicht.
Hier ist die Abfrage:
http://api.discogs.com/database/search?page=1&type=release&release_title=nude+and+rude+the+best+of+iggy+pop
dies ist, was ich wieder
{
"pagination": {
"per_page": 50,
"pages": 1,
"page": 1,
"urls": {},
"items": 0
},
"results": []
}
und hier ist die top-level-Objekt Im Versuch Karte zu
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;
}
}
Ich vermute das problem ist, etwas zu tun, mit dem Ergebnis-array zurückgegeben wird, leer ist, kann aber nicht sehen was ich falsch mache
BEARBEITEN:
Der Kommentar war richtig, obwohl ich in der Regel erhalten
{
"pagination": {
"per_page": 50,
"pages": 1,
"page": 1,
"urls": {},
"items": 0
},
"results": []
}
ist und in diesen Fällen ist es kein problem, aber manchmal scheine ich nur einen leeren String. Jetzt bin ich Frage mich, ob das problem ist, wie ich gelesen aus der inputstream
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();
}
obwohl ich nicht Lesen, bis ich den response-code, ist es möglich, dass ich das erste mal aufrufen, br.ready (), die ich nennen es, bevor es bereit ist, und deshalb habe ich nicht Lesen Sie die input
EDIT 2:
Ändern obigen code einfach
String line;
while ((line = br.readLine()) != null)
{
sb.append(line);
}
ist das Problem behoben.
Ja, Sie sind richtig, ich bin nicht immer jackson mit den Daten die ich dachte, ich war, ich habe aktualisiert die Frage.
InformationsquelleAutor Paul Taylor | 2012-06-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Obwohl es eine Lösung bereits, ich würde vorschlagen, alternative, wo Sie zuerst erstellen
JsonParser
und dann sehen, ob es irgendeine Eingabe, und wenn dem so ist, verwenden Sie Daten binden. Dies ist viel schneller als das Lesen Zeile für Zeile aus, um einen String, und dann reicht es parser.Ja. Sie brauchen nur zu verwenden, parser, wenn Sie Lesen müssen, mehrere separate Werte oder so.
InformationsquelleAutor StaxMan
Ändern obigen code einfach
ist das Problem behoben.
InformationsquelleAutor Paul Taylor