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 ...
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
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