当前位置: 首页 > 知识库问答 >
问题:

Jackson根据其他属性值序列化属性

岳高明
2023-03-14

我正在寻找一种解决方案,使用Jackson基于同一POJO中的其他属性值序列化POJO对象属性

如果某个属性值符合某些条件,则应根据要求更改其他属性值
例如,下面是我的JSON对象:

{
  "testProperty": "testValue",
  "object": [{
    "key": "password",
    "value": "passwordValue"
  },
  {
    "key": "key2",
    "value": "value2"
  }]
}

在上述情况下,如果的值符合某些条件,那么我应该能够更改的值

为什么需要这样做:

  • 对象是一个配置对象
  • -配置设置
  • 在上面的例子中,中有一个是密码,我需要屏蔽/更改相应的

还要补充一点,在这个例子中,属性是keyvalue,但是如果我们找到一些解决方案来动态地将其通用应用于任何其他属性,那就太好了。
注释属性可以是一种方法,但在杰克逊内部没有找到任何方法来使用自定义序列化程序。

提前谢谢<任何帮助都将不胜感激。

共有1个答案

杜翰林
2023-03-14

杰克逊对此有以下概念:

如何设置:注释@JsonFilter将命名过滤器应用于类(bean)。可以在注册表中查找该名称,以找到自定义的财产过滤器实现(例如,抽象SimpleBean财产过滤器的扩展)。注册表是一个可以用ObjectMapper配置的FilterProvider

工作原理:因此,当ObjectMapper实例将要序列化您的bean时,它将识别过滤器,并将逻辑用于FilterProvider。然后,FilterProvider控制是否以及如何序列化属性。

见:

  • Baeldung教程(2019):仅序列化符合Jackson自定义标准的字段
  • 关于CowTownCoder(2011)的文章:Jackson的高级过滤,Json过滤器

例如,BeanSerializerModifier作为基于运行时值条件动态隐藏字段的解决方案。请参见使用jackson序列化时有条件地跳过对象。

(可能不适用于变量键/值对,但通常适用于用于隐藏敏感数据的字段)

请参阅Mask json fields using jackson,它试图html" target="_blank">添加一个特定的序列化程序,该序列化程序从自定义注释派生其掩码。

 类似资料:
  • 问题内容: 使用Jackson 2,我正在寻找一种 通用的 方式将对象序列化为单个值(然后序列化它们,然后再填充该单个字段),而不必重复创建JsonSerializer / JsonDeserializer来处理每种情况。@JsonIdentityInfo批注非常接近,但由于我知道,它将始终对完整的子对象进行序列化,因此略微遗漏了该标记。 这是我想做的一个例子。给定的类: 我希望Order可以序列

  • 我们有一张350列的桌子。pojo类被生成,getter命令被打乱。试图使用jackson提供的csvmapper,但它会根据getter顺序生成csv@JsonPropertyOrder也不适合使用,因为有很多列。我们用xml维护列顺序,并且可以在运行时生成字段顺序数组。我们可以在运行时重写以提供属性排序的字段名数组吗?我们可以使用注释内省器进行自定义吗?

  • 我正在努力找出如何使用杰克逊将具有速记约定的 JSON 反序列化为 Java POJO。 这里的“类型”属性可以是字符串或对象。如果它是一个字符串,那么它被认为是具有默认属性的同一对象的简单简写形式。一、 上例中的1和2是等效的。 据我所知,可以为整个“类型”对象编写自定义反序列化器。据我所知,在这种情况下,我必须手动反序列化整个“类型”对象。但是我真的想只手动处理速记形式,并将正常处理委托给基于

  • 问题内容: 我想根据属性名称打印属性值,例如 我想做这样的事情 上面的代码给出了一个,我相信这是因为BeatifulSoup使用了name,所以它不能用作关键字参数。 问题答案: 这很简单,请使用以下代码- 如果不清楚,请发表评论。

  • 问题内容: 我想序列化一个不受我控制的POJO类,但是想避免序列化任何来自超类而不是最终类的属性。例: 您可以从示例中猜测到,该类是由JOOQ生成的,并且是从复杂的基类UpdatableRecordImpl继承的,该基类还具有一些类似于bean属性的方法,这会在序列化过程中引起问题。另外,我有几个类似的类,因此最好避免对所有生成的POJO复制相同的解决方案。 到目前为止,我已经找到以下可能的解决方