是否有可能使用Jackson將JSON反序列化爲基於JSON內容的兩種類型之一?Jackson根據對象屬性反序列化爲POJO
例如,我有以下的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)
}
}
我會收到看起來要麼以下的JSON:
這JSON應該映射到NaturalId {"packageId": "SomePackage", "thingId": "SomeEntity"}
這JSON應該映射到AlternateId {"key": "SomeUniqueKey"}
有沒有人知道我可以用Jackson 2.x來完成這項工作,而不包括type id的?
此刻;只有這兩個。在不久的將來可能會有三分之一,但我預計不會出現Id類型的爆炸式增長。 我打算查看自定義的Deserializer方法,因爲它可能是最有效的。 – 2013-04-05 14:59:35
我建議你的反序列化器只應該算出'Id'要反序列化到哪個實現,然後委託給Jackson反序列化爲具體類型。這將使得任何有關具體類型的傑克遜註解仍然受到尊重。 (確保在具體類型上放置'@JsonDeserialize(using = None.class)'以避免無限的反序列化循環) – HiJon89 2013-04-05 19:12:11
HiJon是個好主意,但我似乎遇到了這樣的問題;當我調用mapper.readValue(jsonParser,ConcreteType)時,出現以下錯誤:「由於輸入結束而無法映射」,其中jsonParser是傳入反序列化方法的那個,而ConcreteType是我確定的類型是正確的。有任何想法嗎?我有一種感覺,它與API的流式性質有關。 – 2013-04-05 22:47:44