JAX-RS: Comment sérialiser automatiquement une collection lors du renvoi d'un objet Response?

J'ai un JAXB annotées à la classe d'employés:

@XmlRootElement(name = "employee")
public class Employee {

    private Integer id;
    private String name;

    ...

    @XmlElement(name = "id")
    public int getId() {
        return this.id;
    }

    ... //setters and getters for name, equals, hashCode, toString
}

Et un JAX-RS objet de la ressource (je suis en utilisant Jersey 1.12)

@GET
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Path("/")
public List<Employee> findEmployees(
    @QueryParam("name") String name, 
    @QueryParam("page") String pageNumber,
    @QueryParam("pageSize") String pageSize) {
    ...
    List<Employee> employees = employeeService.findEmployees(...);

    return employees;
}

Ce point de terminaison fonctionne très bien. Je reçois

<employees>
  <employee>
    <id>2</id>
    <name>Ana</name>
  </employee>
</employees>

Cependant, si je change la méthode pour retourner un Response objet, et de mettre la liste des employés dans le corps de la réponse, comme ceci:

@GET
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Path("/")
public Response findEmployees(
    @QueryParam("name") String name, 
    @QueryParam("page") String pageNumber,
    @QueryParam("pageSize") String pageSize) {
    ...
    List<Employee> employees = employeeService.findEmployees(...);

    return Response.ok().entity(employees).build();
}

le point de terminaison des résultats dans un HTTP 500 en raison de l'exception suivante:

javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: A message body writer for Java class java.util.ArrayList, and Java type class java.util.ArrayList, and MIME media type application/xml was not found

Dans le premier cas, JAX-RS a évidemment arrangé pour que le message de l'écrivain pour intervenir en cas de retour d'une collection. Il semble quelque peu incompatible que cela ne se produit pas lorsque la collection est placé dans le corps de l'entité. Quelle démarche dois-je prendre pour obtenir de l'automatique JAXB la sérialisation de la liste pour se produire lors du retour d'une réponse?

Je sais que je peux

  • Il suffit de retourner la liste à partir de la ressource méthode
  • De la création d'un EmployeeList classe

mais de savoir si on est une belle façon d'utiliser les Response objet et obtenir la liste de sérialiser sans créer ma propre classe wrapper.

source d'informationauteur Ray Toal