2017-01-03 73 views
0

使用Jackson,我將一個對象序列化爲JSON。 JSON序列化的父對象內部是一個抽象類的某個子類型的對象。使用jackson處理json反序列化中的缺失類

@JsonTypeInfo(
     use = JsonTypeInfo.Id.CLASS, 
     include = JsonTypeInfo.As.PROPERTY, 
     property = "@class") 

public abstract class AbstractSupertype{...} 

public class ActualSerializedSubObject extends AbstractSypertype{...} 

我的對象圖會再看看像

Parent object 
|-> ChildObject 
    |->ActualSerializedSubObject (Or some other subtype of AbstractSupertype) 

的問題是,對於各種OSGi相關的原因,具體亞型和對象是使用序列化,並不總是可用時,它就是後來的反序列化爲一個對象。 當傑克遜正確地拋出異常時com.fasterxml.jackson.databind.JsonMappingException

我想要的是,對於這個特定的領域,當類未找到時,不會拋出異常,但該字段被設置爲null,並且允許解析繼續。該對象的任何剩餘的json應該被丟棄,並替換爲null。

Parent object 
|-> ChildObject 
    |->null (No exception is thrown, the object is set set null) 

這是可能的,以及如何?

回答

0

我想你想用這個configuration option

mapper.configure(DeserializationFeature.FAIL_ON_INVALID_SUBTYPE, false); 

它將取代未知子類型爲null。

+0

我猜我還有另一個問題。我已將FAIL_ON_INVALID_SUBTYPE和FAIL_ON_UNRESOLVED_OBJECT_IDS設置爲false,但仍然收到錯誤com.fasterxml.jackson.databind.JsonMappingException:無效的類型ID'that.subtype.which.is.no.lhere.There' –

+0

您是否確定這些選項是什麼被應用於正確的映射器? –

+0

只有一個映射器,所以我儘可能的確定。我應該說,我通過jsonMapper.enableDefaultTypingAsProperty(ObjectMapper.DefaultTyping.NON_FINAL,「class」)使用類名解析子類型。雖然我不知道這是否有任何區別。 –

相關問題