2017-01-31 5 views
1

Ich folgte der Startanleitung von auf der Frühlingswebsite https://spring.io/guides/gs/consuming-rest/.RestTemplate, das Null zurückgibt, wenn serialisiert zu POJO

Ich befolge das genaue Tutorial nicht in dem Sinne, dass ich einen anderen Endpunkt verwende: http://www.omdbapi.com?s=rush.

Ich habe ein Problem mit der JSON-Konvertierung zu POJO. Ich bekomme keine Fehler oder Ausnahmen. Könnte jemand darauf hinweisen, wo ich falsch liege?

Sie können den vollständigen Code here

Hier sind meine POJOs finden:

package com.sample.restapi.model; 

import java.util.List; 

import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 

@JsonIgnoreProperties(ignoreUnknown=true) 
public class SearchResponse { 

    private List<Search> search; 

    private String totalResults; 

    private String response; 

    public SearchResponse() { 

    } 

    public List<Search> getSearch() { 
     return search; 
    } 

    public void setSearch(List<Search> search) { 
     this.search = search; 
    } 

    public String getTotalResults() { 
     return totalResults; 
    } 

    public void setTotalResults(String totalResults) { 
     this.totalResults = totalResults; 
    } 

    public String getResponse() { 
     return response; 
    } 

    public void setResponse(String response) { 
     this.response = response; 
    } 

    @Override 
    public String toString() { 
     return "SearchResponse [search=" + search + ", totalResults=" + totalResults + ", response=" + response + "]"; 
    } 

} 

Hier die Search.java ist

package com.sample.restapi.model; 

import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 

@JsonIgnoreProperties(ignoreUnknown=true) 
public class Search { 

    private String title; 

    private String year; 

    private String imdbID; 

    private String type; 

    private String poster; 

    public Search() { 

    } 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

    public String getYear() { 
     return year; 
    } 

    public void setYear(String year) { 
     this.year = year; 
    } 

    public String getImdbID() { 
     return imdbID; 
    } 

    public void setImdbID(String imdbID) { 
     this.imdbID = imdbID; 
    } 

    public String getType() { 
     return type; 
    } 

    public void setType(String type) { 
     this.type = type; 
    } 

    public String getPoster() { 
     return poster; 
    } 

    public void setPoster(String poster) { 
     this.poster = poster; 
    } 

    @Override 
    public String toString() { 
     return "Search [title=" + title + ", year=" + year + ", imdbID=" + imdbID + ", type=" + type + ", poster=" 
       + poster + "]"; 
    } 
} 

Hier ist die Treiberklasse.

package com.sample.restapi; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.web.client.RestTemplate; 

import com.sample.restapi.model.SearchResponse; 

@SpringBootApplication 
public class ConsumerApplication { 

    private static final Logger log = LoggerFactory.getLogger(ConsumerApplication.class); 

    public static void main(String[] args) { 

     RestTemplate restTemplate = new RestTemplate(); 
     SearchResponse searchResponse = restTemplate.getForObject("http://www.omdbapi.com?s=rush", SearchResponse.class); 

     log.info(searchResponse.toString()); 
    } 
} 

Die Konsolenausgabe ist:

14:34:12.941 [main] INFO com.sample.restapi.ConsumerApplication - SearchResponse [search=null, totalResults=344, response=null] 
+0

Was genau gibt null? Ich vermute, du meinst, dass die Liste null ist. In diesem Fall mögliches Duplikat von http://stackoverflow.com/questions/19580856/jackson-list-serialization-nested-lists – Redlab

+0

@Redlab Ich habe gerade einen Schnitt gemacht, der die Konsolenausgabe angibt, die ich bekomme. Ich denke, du kannst nicht sagen, dass es doppelt ist, weil ich nicht verstehen kann, wie RestTemplate die konsumierte API verarbeitet und in mein POJO konvertiert. – Amriteya

+0

Sie haben Recht, es ist kein Duplikat. siehe meine Antwort – Redlab

Antwort

3

Sie richtigen Kennungen für die Objekte im json, fehlen gibt es Unterschiede in der Reaktion und Ihre Klassen in der Hauptstadt und Kleinbuchstaben. Verwenden Sie @JsonProperty in Ihren Klassen.

@JsonProperty("Search") 
private List<Search> search = new ArrayList<Search>(); 

private String totalResults; 
@JsonProperty("Response") 
private String response; 

Sie sollten auch @ JsonProperty Annotationen in der Search-Klasse hinzufügen.

+0

Ich habe eine Frage. Warum erhielt ich dann Daten für das Feld "totalResults"? – Amriteya

+2

totalResults Fall ist das gleiche wie JSON Antwort – mhshimul

+0

Auch, warum ist das in der Leitlinie sie nicht die Annotion @ JsonProperty verwenden und es funktioniert noch? – Amriteya

Verwandte Themen