【问题标题】:How do I add a Jackson mixin to a reader and not to the objectmapper?如何将 Jackson mixin 添加到阅读器而不是 objectmapper?
【发布时间】:2012-08-03 13:45:49
【问题描述】:

我有一个对象,我想在程序的一部分中使用属性进行序列化,但在另一部分中没有。我还有一个 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);

【问题讨论】:

    标签: java json jackson


    【解决方案1】:

    正确。但是,您不能即时更改混入:因为它们用于(反)序列化器的自省,并且结果(实际(反)序列化器)被缓存,所以它们必须作为初始配置的一部分添加。 这就是为什么ObjectReaderObjectWriter 都没有公开更改混入的方法:它们只允许在每次调用的基础上更改可以动态更改的内容。

    但也许混入并不是最好的方法:您是否考虑过使用JSON Views 代替?可以为每个(反)序列化单独更改正在使用的活动视图。

    【讨论】:

      【解决方案2】:

      实际上,您可以为序列化或反序列化(或两者兼有)配置 mixins:

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

      http://wiki.fasterxml.com/JacksonMixInAnnotations

      【讨论】:

        猜你喜欢
        • 2018-11-09
        • 2020-02-08
        • 2012-10-17
        • 2020-10-18
        • 2016-11-03
        • 2012-02-12
        • 2023-03-13
        • 1970-01-01
        • 2016-10-07
        相关资源
        最近更新 更多