W mojej obecnej konfiguracji używam systemu Jersey 2.0 z MOXy, jak opisano w jersey docs. Całkowicie polegam na "Auto-Discoverable Features" , więc nie używam adnotacji dodatkowej konfiguracji ani JAXB.Moxy, JSON i Jersey 2.0 nie deserializują zwykłego łańcucha String
Moim zadaniem jest deserializować tablicę łańcuchów po stronie serwera. Klient wysyła komunikat JSON:
["foo","bar"]
A po stronie serwera sposób następujący nagłówek powinien go deserializowania:
@POST
@Path("/stringArray")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response stringArray(List<String> stringList) {
...
}
Problem: Zawartość stringList jest {null, null} , więc ilość elementów jest zawsze poprawna, ale łańcuchy mają wartość NULL.
To samo z małą klasą otoki działa. Tutaj klasa:
public static class Data {
public List<String> stringList;
}
Zmiana podpisu Methode do stringArray (dane danych) i zmieniając wiadomość JSON do:
{"stringList": ["foo","bar"]}
Jaka jest różnica między tymi dwoma podejściami i jak mogę dostać zwykły ciąg tablica działa?
Aktualizacja: Opisany problem został rozwiązany przez odpowiedź z @Blaise. Ale blisko związany problem serializacji listy POJO nadal nie działa. Wiadomość:
[org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter nie znaleziono dla typu nośnika = application/json, type = klasy java.util.ArrayList, genericType = java.util klasy .ArrayList]
jedynym rozwiązaniem znalazłem się ponownie przy użyciu małej klasy otoki zawierającego wykaz ...
W ogóle wydaje się być trudne do serializacji/Kolekcje deserializowania np Lista > bez zawijania ich w klasie. Czy ktoś może to potwierdzić? – adler
Problem rozwiązany przy użyciu plików org.eclipse.persistence.core_2.5.1.v20130706-f712d02.jar i org.eclipse.persistence.moxy_2.5.1.v20130706-f712d02.jar zamiast wersji 2.5.0. Dzięki @blaise – adler