杰克逊可以从不同的JSON字符串反序列化到同一个对象吗?

时间:2016-08-08 14:34:02

标签: java json serialization jackson

我有一个JSON字符串,如下所示:

Relationship

然后由于某种原因,必须更新到新结构,预期的传入JSON字符串变为:

{
...
"token": "abc123"
...
}

最初,令牌字段是字符串类型,现在,它变成了一个具有附加属性的对象。

我需要处理这两种格式以实现向后兼容,jackson可以处理这种情况吗?

3 个答案:

答案 0 :(得分:0)

您可以通过创建自己的反序列化器来完成此操作:

class FooJsonDeserializer extends JsonDeserializer<Foo> {

    @Override
    public Foo deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
        Foo foo = new Foo();
        //deserialize your data here
        return foo;
    }
}

不要忘记将解串器添加到您的班级

@JsonDeserialize(using = FooJsonDeserializer.class)
class Foo {
    ...
}

答案 1 :(得分:0)

您可以使用token注释@JsonDeserialize(using=YourCustomDeserializer.class) setter,并仅为一个字段反序列化提供逻辑。

答案 2 :(得分:0)

您可以使用我编写的Jackson模块来处理版本控制。有关如何使用它的信息,请参阅自述文件中的示例。

https://github.com/jonpeterson/jackson-module-model-versioning