Как сериализовать эту строку JSON Array, используя аннотации Джексона? - PullRequest
0 голосов
/ 26 февраля 2011

[{"ID": "hzQ8ll", "CreationDate": "Чт, 24 февраля 2011 г., 12:53:31 GMT", "Count": 6, "Name": "SOMETAG"}]

Внутренняя часть имеет тип Tag, поэтому я просто написал этот класс Java:

public class Tags {
    public List <Tag>tags;
}

Но я получаю com.sun.jersey.api.client.ClientHandlerException:

org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of com.test.Tags  out of START_ARRAY token

Я использую Джерси с JacksonJsonProvider следующим образом:

ClientConfig config = new DefaultClientConfig();
config.getClasses().add(JacksonJsonProvider.class);

Тогда я просто звоню клиенту из Джерси:

ClientResponse response = builder.get(ClientResponse.class);
Tags tags = response.getEntity(Tags.class);

Есть идеи? Большую часть времени у моих самых внешних элементов было имя, связанное с ним, так что это ново для меня. Спасибо за любую помощь

1 Ответ

3 голосов
/ 26 февраля 2011

Возможно, вам придется объявить Tag[] вместо List<Tag>. У меня была похожая проблема с другой библиотекой JSON. Кажется, это связано с трудностями, связанными с анализом универсальных контейнеров.

У вас странное использование get ().

http://jersey.java.net/nonav/apidocs/1.5/jersey/com/sun/jersey/api/client/UniformInterface.html#get%28java.lang.Class%29

Возвращаемый тип и тип аргумента должны быть одинаковыми.

Или:

 ClientResponse resp = builder.get(ClientResponse.class);

или

 Tag[] resp = builder.get(Tag[].class);

В любом случае, похоже, что проблема в том, что ваши данные JSON являются массивом, и они десериализуются в нечто, не являющееся (теги).

Попробуйте прямо:

Tag[] tags = response.getEntity(Tag[].class); 
...