2011-11-17 7 views
7

¿Cómo puedo devolver una lista de objetos de pregunta en XML o JSON?Devuelve una lista de objetos cuando usa JAX-RS

@Path("all") 
@GET 
public List<Question> getAllQuestions() { 
    return questionDAO.getAllQuestions(); 
} 

me sale esta excepción:

GRAVES: asignada a excepción respuesta: 500 (Internal Server Error) javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException : Un escritor cuerpo del mensaje para Java java.util.Vector clase y tipo de Java java.util.List, y los medios MIME tipo no se encontró application/octet-stream

Respuesta

4

Probar:

@Path("all") 
@GET 
public ArrayList<Question> getAllQuestions() { 
    return (ArrayList<Question>)questionDAO.getAllQuestions(); 
} 

Si su objetivo es devolver una lista de elemento que puede utilizar:

@Path("all") 
@GET 
public Question[] getAllQuestions() { 
    return questionDAO.getAllQuestions().toArray(new Question[]{}); 
} 

Editar respuesta original Añadido por encima de

+0

no parece hacer una diferencia :( – LuckyLuke

+0

Editar, sólo por curiosidad, ¿qué versión de JAX está usando? – Thys

+2

no hubiera añadido la anotación @XmlRootElement en la clase de dominio, ahora funciona. Sí funcionó con usted primer ejemplo, entonces :) – LuckyLuke

0

Su servicio web puede tener este aspecto :

@GET 
@Path("all") 
@Produces({ "application/xml", "application/*+xml", "text/xml" }) 
public Response getAllQuestions(){ 
List<Question> responseEntity = ...; 
return Response.ok().entity(responseEntity).build(); 
} 

entonces usted debe crear un proveedor, MessageBodyWriter:

@Produces({ "application/xml", "application/*+xml", "text/xml" }) 
@Provider 
public class XMLWriter implements MessageBodyWriter<Source>{ 

} 
6

El mismo problema en mi caso fue resuelto mediante la adición del parámetro POJOMappingFeature init para el servlet de REST, por lo que se ve así:

<servlet> 
    <servlet-name>RestServlet</servlet-name> 
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 

    <init-param> 
     <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
     <param-value>true</param-value> 
    </init-param> 
</servlet> 

Ahora incluso funciona con Return List en Weblogic 12c.

3

Antes que nada, debe establecer la anotación correcta de @Produces. Y segundo, puede usar GenericEntity para serializar una lista.

@GET 
@Path("/questions") 
@Produces({MediaType.APPLICAtION_XML, MediaType.APPLICATION_JSON}) 
public Response read() { 

    final List<Question> list; // get some 

    final GenericEntity<List<Question>> entity 
     = new GenericEntity<List<Question>>() {}; 

    return Response.ok(entity).build(); 
} 
Cuestiones relacionadas