2013-07-04 5 views
5

In meinem aktuellen Setup verwende ich Jersey 2.0 mit MOXy wie in jersey docs beschrieben. Ich verlasse mich vollständig auf die "Auto-Discoverable Features" , also verwende ich keine zusätzliche Konfiguration oder JAXB Annotation.Moxy, JSON und Jersey 2.0 deserialisieren nicht einfach String-Array

Meine Aufgabe ist es, ein Array von Zeichenfolgen auf der Serverseite zu deserialisieren. Der Client sendet die JSON-Nachricht:

["foo","bar"] 

Und auf der Serverseite die folgende Methode Header sollte es deserialisieren:

@POST 
@Path("/stringArray") 
@Produces(MediaType.APPLICATION_JSON) 
@Consumes(MediaType.APPLICATION_JSON) 
public Response stringArray(List<String> stringList) { 
    ... 
} 

Problem: Der Inhalt string ist {null, null} , also ist die Anzahl der Elemente immer korrekt, aber die Zeichenfolgen sind auf null gesetzt.

Das gleiche mit einer kleinen Wrapper-Klasse funktioniert. Hier ist die Klasse:

public static class Data { 
    public List<String> stringList; 
} 

Ändern Methode Signatur string (Data-Daten) und die Änderung der JSON Nachricht an:

{"stringList": ["foo","bar"]} 

Was ist der Unterschied zwischen den beiden Ansätzen ist und wie kann ich die Ebene Zeichenfolge Array funktioniert?

Update: Das beschriebene Problem wird durch die Antwort von @Blaise behoben. Aber das eng verwandte Problem der Serialisierung einer POJO-Liste funktioniert immer noch nicht. Nachricht:

[org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter nicht für Medien type = application/json gefunden, type = Klasse java.util.ArrayList, genericType = class java.util .ArrayList]

die einzige Lösung, die ich wieder zu finden ist ein kleines Wrapper-Klasse enthält die Liste ...

+0

Im Allgemeinen ist es schwierig zu sein scheint, zum Beispiel zu serialisiert/deserialize Kollektionen Listen Sie auf, ohne sie in einer Klasse zu verpacken. Kann das jemand bestätigen? – adler

+0

Problem gelöst durch org.eclipse.persistence.core_2.5.1.v20130706-f712d02.jar und org.eclipse.persistence.moxy_2.5.1.v20130706-f712d02.jar anstelle der 2.5.0-Versionen. Danke an @blaise – adler

Antwort