如何使用Jackson Annotations序列化此JSON数组字符串?

时间:2011-02-25 21:22:03

标签: json parsing jersey jackson

  

[{“ID”:“hzQ8ll”,“CreationDate”:“星期四,2011年2月24日12:53:31 GMT”,“伯爵”:6,“姓名”:“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 个答案:

答案 0 :(得分:3)

您可能需要声明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数据是一个数组,并且它被反序列化为不是(Tags)的东西。

直接试试:

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