2011-06-14 25 views
10

Escribo un cliente que realiza una solicitud GET al servicio REST utilizando la API de Jersey Client. La respuesta es una colección de objetos, y debo deserializarla. Aquí está mi código:Cómo deserializar la respuesta JSON del servicio REST de Jersey a la colección de objetos java

ClientConfig clientConfig = new DefaultClientConfig(); 
    clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, 
      Boolean.TRUE); 
    Client client = Client.create(clientConfig); 
    WebResource r = client 
      .resource("http://localhost:8080/rest/gadgets"); 

y la clase que representa "gadget" modelo (anotado con @XmlRootElement para el procesamiento de JAXB):

@XmlRootElement 
public class Gadget { 

    private String url; 
    private String title; 
    private String name; 

    public Gadget() { 
} 


public String getUrl() { 
    return url; 
} 

public void setUrl(String url) { 
    this.url = url; 
} 


public String getTitle() { 
    return title; 
} 

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

public String getName() { 
    return name; 
} 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

Si la respuesta sería simplemente copia Gadget, no una colección, la pude parecía como

Gadget result = r.get(Gadget.class); 

Pero JSON en respuesta contiene una lista de aparatos, y tengo que leerlo a la colección de java. Algo así como

List<Gadget> result = r.get(List<Gadget>.class); 

no se compila. ¿Puede alguien ayudarme aquí? No quiero usar libs adicionales, creo que esto se puede hacer usando jersey-json.jar y JAXB, pero no sé cómo.

Respuesta

16

creo que desea utilizar una subclase anónima de GenericType:

r.get(new GenericType<List<Gadget>>() {}); 

List<Gadget>.class no funcionará porque el tipo de borrado.

0

Para la serialización y/o deserialización, puede crear clases de fachada JSON para su objeto, lo que le ayudará a serializar y deserializar objetos.

Y sugeriré que no se use colletion en tales objetos que se pasan por algún servelet, o red, hace que el objeto de transporte sea muy pesado, en su lugar utiliza arreglos normales. Eso aliviará tu problema.

0

Ha intentado

Gadget [] = resultado r.get (Gadget [] clase.);

Lo anterior funciona para mí.

-Bab

Cuestiones relacionadas