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.

Ich bezweifle, dass Jackson würde sich so benehmen, wenn der Strom in der Tat hat die Daten. Ich würde vorschlagen, Lesen Sie die Strom-und print-Daten auf die Konsole, wo Sie tun jackson Deserialisierung um sicherzustellen, dass es infact, die Daten zu Lesen.
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

Schreibe einen Kommentar