杰克逊基于对象属性反序列化为POJO

Phi*_*rdi 4 java json jaxb jackson

是否可以使用Jackson将JSON反序列化为基于JSON内容的两种类型之一?

例如,我有以下Java(技术上是Groovy,但这并不重要)接口和类:

interface Id {
    Thing toThing() 
}

class NaturalId implements Id {

    final String packageId

    final String thingId

    Thing toThing() {
        new PackageIdentifiedThing(packageId, thingId)
    }         
}

class AlternateId implements Id {

    final String key

    Thing toThing() {
        new AlternatelyIdentifiedThing(key)
    }
}
Run Code Online (Sandbox Code Playgroud)

我将收到的JSON将如下所示:

此JSON应映射到NaturalId {"packageId": "SomePackage", "thingId": "SomeEntity"}

此JSON应映射到AlternateId {"key": "SomeUniqueKey"}

有没有人知道我怎么能用Jackson 2.x完成这个,而不包括类型id?

HiJ*_*n89 7

这些只是实施的两个类Id吗?如果是这样,你可以写一个IdDeserializer类,并把@JsonDeserialize(using = IdDeserializer.class)该上的Id接口,以及解串器会看着JSON,并确定哪些对象进行反序列化到.

编辑:JsonParser是流媒体所以它应该看起来像这样:

public Id deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
    ObjectNode node = jp.readValueAsTree();
    Class<? extends Id> concreteType = determineConcreteType(node); //Implement 
    return jp.getCodec().treeToValue(node, concreteType);
}
Run Code Online (Sandbox Code Playgroud)