Maillot de repos serveur - Retour liste json

Je suis en train de vivre une différence dans la structure json d'un retour liste exécutant le même code lors de l'exécution sur le serveur Tomcat et Glassfish.

@XmlRootElement
public Class Person {
    private int personId;
    private String name;
}

@GET
@Path("/persons")
public Response getPersons()
{
    List<Person> persons = new ArrayList<Person>();
    persons.add(new Person(1, "John Smith"));
    persons.add(new Person(2, "Jane Smith"));

    GenericEntity<List<Person>> entity = new GenericEntity<List<Person>>(Lists.newArrayList<persons)) {};
    Return Response.ok(entity).build();
}

En cas de retour au format json sur tomcat (je suis en cours d'exécution de Tomcat sur la machine locale), le résultat sera:

[
    {
        "personId" : "1",
        "name" : "John Smith"
    },
    {
        "personId" : "2",
        "name" : "Jane Smith"
    }
]

Et en cas de retour au format json sur Glassfish (l'exécution de Glassfish sur serveur distant), le résultat sera:

{
    "person" : 
    [
        {
            "personId" : "1",
            "name" : "John Smith"
        },
        {
            "personId" : "2",
            "name" : "Jane Smith"
        }
    ]
}

Comment puis-je contrôler ce format de mon auto? Je préfère la matrice de format (comme sur Tomcat) si possible. De toute façon je le veux pour produire le même résultat.

Edit:

Dépendances:
jersey-conteneur de servlet (2.14),
jersey-serveur (2.14),
jersey-médias-moxy (2.14),
javax.servlet-api (3.0.1)

Version de Glassfish: 3.1.2.2 (version 5)

Edit 2:
C'est un problème avec Jersey 2.14 et Glassfish 3.x

Je viens d'installer Glassfish 3 et 4 et déployé le reste d'application pour vérifier la réponse. Il en est résulté dans différentes structure json lors du retour d'une liste. La réponse de Glassfish 4 est identique au résultat que j'ai obtenu lors de l'exécution sur Tomcat.

  • Avez-vous essayé de construire le Response directement à partir de la List sans l'aide de la GenericEntity?
  • J'ai essayé mais cela ne fonctionne pas: SÉVÈRE: MessageBodyWriter pas trouvé le type de support=application/json, type=classe java.util.Liste de tableaux, genericType=classe java.util.Liste de tableaux.
  • Merci de poster vos dépendances et qui Glassfish vous travaillez avec.
  • Et quel est le point de l'utilisation de la Liste.newArrayList? Me semble inutile
  • Oui, c'est vrai. Mais ce n'est pas pertinent à ce problème de la pensée, ne change pas le résultat.
  • Si jamais je vois un problème lié à cela, je pense automatiquement de largage, qui comme je l'ai trouvé dans de nombreux cas, est le coupable. Glassfish 3 utilise la larguer pour son JAXB en JSON. Que Glassfish en Jersey, ce qui est très âgées 1.somethingLow, est chargé toujours, pour sa console d'administration. Je crois que peut avoir le problème. Content que vous l'avez trié 🙂
  • Le lien ci-dessous pourraient vous aider à le comprendre le corps d'Un message de l'écrivain pour la classe Java java.util.Liste de tableaux...et le type MIME text/xml n'a pas été trouvé

InformationsquelleAutor sjallamander | 2015-01-14