我有一个对象,我想在程序的一个部分中使用属性进行序列化,但没有不同的部分。我还有一个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);
答案 0 :(得分:5)
正确。但是,您无法动态更改混合:由于它们用于(de)序列化程序的内省,并且结果(实际(反)序列化程序)被缓存,因此必须将它们作为初始配置的一部分添加。
这就是为什么ObjectReader
和ObjectWriter
都没有公开改变混合的方法的原因:它们只允许在每个呼叫的基础上改变可以动态改变的东西。
但也许混合不是最好的方法:您是否考虑过使用JSON Views?可以为每个(反)序列化单独更改正在使用的活动视图。
答案 1 :(得分:3)
实际上,您可以配置mixins进行序列化或反序列化(或者两者兼而有之):
objectMapper.getSerializationConfig().addMixInAnnotations(Rectangle.class, MixIn.class);
objectMapper.getDeserializationConfig().addMixInAnnotations(Rectangle.class, MixIn.class);