2016-04-28 8 views
0

Derzeit bin Drucken ich die Ausgabe von meinem Podcast API wie folgt aus:Jersey: Wie drucke ich ein generisches Objekt mit geschachtelten Objekten als JSON?

{ 
    "data":[{"feed":"someUrl","id":1,"name":"someName"}], 
    "success":true 
} 

ich das Objekt mit „Daten“ und „Erfolg“ eine Antwort Objekt haben zur Erzeugung und ich habe ein PodcastResponse Objekt für den Podcast-Objekt mit "feed", "id", "name".

@XmlRootElement() 
@XmlSeeAlso(PodcastResponse.class) 
public class Response { 
    @XmlElement 
    boolean success = true; 
    @XmlElement  
    List<PodcastResponse> data; 
    //Getters, Setters, etc. 
} 

@XmlRootElement() 
public class PodcastResponse { 
    @XmlElement 
    int id; 
    @XmlElement 
    String name; 
    @XmlElement 
    String feed_url; 
    //Getters, Setters, etc. 
} 

Dies erzeugt den Ausgang:

@GET 
@Produces(MediaType.APPLICATION_JSON) 
public Response getPodcasts() { 
    return new Response(true, PodcastManager.getPodcasts()); 
} 

, das funktioniert. Jetzt möchte ich die Response-Klasse generieren, so dass ich sie mit mehr als der PodcastResponse-Klasse verwenden kann.

@XmlRootElement() 
public class Response<T> { 
    @XmlElement 
    boolean success = true; 
    @XmlElement 
    List<T> data; 
    //Getters, Setters, etc. 
} 

Das nicht funktioniert wie erwartet, die Ausgabe:

{ 
    "data": ["[email protected]"], 
    "success":true 
} 

Wie kann ich eine generische Response Class schreiben, so dass ich eine varitey von Daten in das JSON-Format anzeigen kann?

+1

Sie verwenden müssen [jaxb Anmerkungen] (https://jersey.java.net/documentation/1.19.1/xml.html) für PodcastResponse so dass, wenn das Objekt serialisiert wird Ihre Serializer weiß, wie man Generiere den JSON für jedes Feld. – randominstanceOfLivingThing

Antwort

2

Verwenden Sie JAXB-Anmerkungen, die Sie mit Jersey verwenden können, um das Java-Objekt zu XML oder JSON zu serialisieren. Hier ist eine Seite, die how to auflistet.

@XmlRootElement() 
public class PodcastResponse { 
    int id; 
    String name; 
    String feed_url; 
    //Getters, Setters, etc. 
} 
+0

Hat es dein Problem gelöst? – randominstanceOfLivingThing

+0

Es funktioniert damit: '@ XmlSeeAlso (PodcastResponse.class)', aber wie könnte ich es mit einer generischen Antwort tun? '@XmlSeeAlso (T)' funktioniert nicht. – Eknoes

+0

Ich habe meine Frage aktualisiert – Eknoes