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
的值。
为什么需要这样做:
object
是配置对象
- 和
key
-value
是配置设置
- 在上面的示例中,
key
之一是 password
,我需要 mask/change 相应的 value
。
还有一点要补充,在这个例子中,属性是 key
和 value
,但是如果我们找到一些解决方案来动态地将它普遍应用于任何其他属性,那将是伟大的。
注释属性可能是一种方法,但在 Jackson 中还没有找到任何方法来使用自定义序列化程序。
提前致谢。
任何帮助将不胜感激。
Jackson 对此有以下概念:
Filter:过滤和控制属性的序列化
如何设置:
注释 @JsonFilter
将 named 过滤器应用于 class(bean)。
可以在注册表中查找该名称以找到自定义 PropertyFilter
实现(例如抽象 SimpleBeanPropertyFilter
的扩展)。
注册表是一个 FilterProvider
,可以使用您的 ObjectMapper
.
配置
工作原理:
因此,当 ObjectMapper 实例即将序列化您的 bean 时,它将识别过滤器并将逻辑用于 FilterProvider
。 FilterProvider
然后控制 属性 是否以及如何序列化。
参见:
- Baeldung 教程 (2019):Serialize Only Fields that meet a Custom Criteria with Jackson
- CowTownCoder 上的文章 (2011):Advanced filtering with Jackson, Json Filters
Modifier:运行时修改序列化,dynamically/conditional
例如 BeanSerializerModifier
作为动态隐藏字段的解决方案 - 基于运行时值条件。参见 Skip objects conditionally when serializing with jackson。
静态遮蔽
(可能不适用于您的变量 key/value 对,但对于旨在隐藏敏感数据的字段来说通常是个好方法)
参见 Mask json fields using jackson,它试图添加一个特定的序列化程序,该序列化程序从自定义注释派生其掩码。
我正在寻找一种基于同一 POJO 中的其他 属性 值使用 Jackson 序列化 POJO 对象 属性 的解决方案。
如果 属性 值符合某些条件,则应根据要求更改其他 属性 值。
例如,下面是我的 JSON 对象:
{
"testProperty": "testValue",
"object": [{
"key": "password",
"value": "passwordValue"
},
{
"key": "key2",
"value": "value2"
}]
}
在上述情况下,如果 key
的值符合某些条件,那么我应该能够更改 value
的值。
为什么需要这样做:
object
是配置对象- 和
key
-value
是配置设置 - 在上面的示例中,
key
之一是password
,我需要 mask/change 相应的value
。
还有一点要补充,在这个例子中,属性是 key
和 value
,但是如果我们找到一些解决方案来动态地将它普遍应用于任何其他属性,那将是伟大的。
注释属性可能是一种方法,但在 Jackson 中还没有找到任何方法来使用自定义序列化程序。
提前致谢。
任何帮助将不胜感激。
Jackson 对此有以下概念:
Filter:过滤和控制属性的序列化
如何设置:
注释 @JsonFilter
将 named 过滤器应用于 class(bean)。
可以在注册表中查找该名称以找到自定义 PropertyFilter
实现(例如抽象 SimpleBeanPropertyFilter
的扩展)。
注册表是一个 FilterProvider
,可以使用您的 ObjectMapper
.
工作原理:
因此,当 ObjectMapper 实例即将序列化您的 bean 时,它将识别过滤器并将逻辑用于 FilterProvider
。 FilterProvider
然后控制 属性 是否以及如何序列化。
参见:
- Baeldung 教程 (2019):Serialize Only Fields that meet a Custom Criteria with Jackson
- CowTownCoder 上的文章 (2011):Advanced filtering with Jackson, Json Filters
Modifier:运行时修改序列化,dynamically/conditional
例如 BeanSerializerModifier
作为动态隐藏字段的解决方案 - 基于运行时值条件。参见 Skip objects conditionally when serializing with jackson。
静态遮蔽
(可能不适用于您的变量 key/value 对,但对于旨在隐藏敏感数据的字段来说通常是个好方法)
参见 Mask json fields using jackson,它试图添加一个特定的序列化程序,该序列化程序从自定义注释派生其掩码。