2013-07-04 16 views
5

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

+0

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

+0

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

Odpowiedz

Powiązane problemy