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

Jackson serialise property based on other property value

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

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

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

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

为什么需要这样做:


还有一点要补充,在这个例子中,属性是 keyvalue,但是如果我们找到一些解决方案来动态地将它普遍应用于任何其他属性,那将是伟大的。
注释属性可能是一种方法,但在 Jackson 中还没有找到任何方法来使用自定义序列化程序。

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

Jackson 对此有以下概念:

Filter:过滤和控制属性的序列化

如何设置: 注释 @JsonFilternamed 过滤器应用于 class(bean)。 可以在注册表中查找该名称以找到自定义 PropertyFilter 实现(例如抽象 SimpleBeanPropertyFilter 的扩展)。 注册表是一个 FilterProvider,可以使用您的 ObjectMapper.

配置

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

参见:

Modifier:运行时修改序列化,dynamically/conditional

例如 BeanSerializerModifier 作为动态隐藏字段的解决方案 - 基于运行时值条件。参见 Skip objects conditionally when serializing with jackson

静态遮蔽

(可能不适用于您的变量 key/value 对,但对于旨在隐藏敏感数据的字段来说通常是个好方法)

参见 Mask json fields using jackson,它试图添加一个特定的序列化程序,该序列化程序从自定义注释派生其掩码。