2017-01-03 6 views
0

ジャクソンを使用して、オブジェクトをJSONにシリアル化しています。 JSON-Serialized親オブジェクト内には、抽象クラスのサブタイプであるオブジェクトがあります。jacksonを使用したjsonデシリアライゼーションでの欠落クラスの処理

私のオブジェクトグラフが、問題は、様々なOSGiの関連の理由で、特定のサブタイプとオブジェクトがで連載されたことがあり、それが後にあるときは、常に利用可能でない

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

ようになり

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

public abstract class AbstractSupertype{...} 

public class ActualSerializedSubObject extends AbstractSypertype{...} 

オブジェクトにデシリアライズされます。 その場合、ジャクソンは正しく例外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.longer.There' –

+0

あなたはこれらのオプション右のマッパーに適用されましたか? –

+0

マッパーが1つしかないので、私はできると確信しています。私はおそらく、私はクラス名を使用してサブタイプのためにjsonMapper.enableDefaultTypingAsProperty(ObjectMapper.DefaultTyping.NON_FINAL、 "class")を使って解決していると言わなければならない。私はそれが何か違いがあるかどうかは分かりませんが。 –

関連する問題