反序列化Jackson 2.3返回null对象

时间:2014-03-05 09:17:07

标签: android jackson

我正在使用Jackson 2.3而且我在反序列化方面遇到了一些问题。

我有这些类和接口:

FollowValue:

public class FollowValue implements Value{

@JsonProperty("id");
public long id;

@JsonProperty("time_creation")
@JsonDeserialize(using = DateDeserializer.class)
public Date timeCreation;

@JsonProperty("follower")
private User follower;

@JsonProperty("user")
private User user;

@Override
public long getId() {
    return id;
}

@Override
public Date getTimeCreation() {
return timeCreation;
}
}

值:

public interface Value {

public long getId();
public Date getTimeCreation();

}

当我像这样阅读FollowValue时:

FollowValue value = mapper.readValue(valueNode.traverse(), FollowValue.class);

没有显示异常,追随者和用户为空。我搜索过一个解决方案,但我只找到以前版本的Jackson的文档。我怎样才能反序化呢?

谢谢!

这是我试图解析的JSON:

"type": "Follow",
"value": {
        "id": 205,
        "time_creation": "2014-03-04T14:54:53+0100",
        "follower": {
            "id": 62,
            "username": "email@email.com",
            "fullname": "Meri Riera",

        },
        "user": {
            "id": 24,
            "username": "email@email.com",
            "fullname": "Héctor",

        }
    }

2 个答案:

答案 0 :(得分:0)

由于你的jsonc数据不适合FollowValue格式,我认为它不会被解析。

尝试使用@JsonRootName(value = "value")

注释您的主要实体

然后在实例化ObjectMapper对象后,使用以下命令对其进行配置:

mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);

希望这能解决您的问题。

答案 1 :(得分:0)

你可以试试这个:

mapper.readValue(valueNode.traverse(objectCodec), FollowValue.class);

我不知道这是否是最好的方法,但它对我有用。