2012-08-06 3 views
5

私は、私のプログラムのある部分の属性でシリアル化したいが、別の部分は持たないオブジェクトを持っている。私はまた、私は両方のシリアル化に使用する広範囲にカスタマイズされたObjectMapperを持っています。私の最初の傾向は、Mixinを使用して属性が表示されているかどうかを調整することでしたが、ObjectMapperで返されたリーダーではなく、ObjectMapperにのみ配置できるようです。基本的に私が書くことができるコードは、次のようになります。ジャクソンミックスインをリーダーに追加し、オブジェクトマッパーに追加する方法はありますか?

ObjectMapper myMapper = new ObjectMapper(); // in reality there is a lot of customization 
Foo foo = myMapper.reader().withMixin(Foo.class, FooMixin.class).readValue(jsonParser, Foo.class); 

答えて

5

正しいです。ただし、(de)シリアライザのイントロスペクションに使用され、結果(actual(de)シリアライザ)がキャッシュされるため、ミックスインをオンザフライで変更することはできません。これらは初期設定の一部として追加する必要があります。 ObjectReaderでもObjectWriterも、ミックスインを変更する方法を公開していないため、コール単位で動的に変更できるものの変更のみが可能です。

おそらくmix-insはこれを実行する最良の方法ではありません:代わりにJSON Viewsを使用すると考えましたか?使用中のアクティブビューは、各(de)シリアライゼーションごとに個別に変更できます。

3

実際に、あなたは、直列化または直列化復元(またはコースの両方)のためのミックスインを設定できます。

objectMapper.getSerializationConfig().addMixInAnnotations(Rectangle.class, MixIn.class); 
objectMapper.getDeserializationConfig().addMixInAnnotations(Rectangle.class, MixIn.class); 

http://wiki.fasterxml.com/JacksonMixInAnnotations

関連する問題