杰克逊:根据其属性从序列化中排除对象
Jackson: exclude object from serialization based on its properties
在 Jackson 中根据对象的属性从序列化中排除对象的最简单方法是什么?
例如,假设 class C
的实例 o
有一个 boolean enabled
字段。如果 o.enabled == false
,则不应序列化该对象。
此外,我怎样才能使它与当前的 JSON 视图结合使用?例如,假设 class C
的实例 o
有一个 boolean topSecret
字段。如果 o.topSecret == true
,并且当前 JSON View 不是 TopSecret.class
,则不应序列化该对象。
没有执行此操作的直接功能,因为序列化的工作方式,值对象本身无法决定是否要序列化。这主要是因为 属性 name 可能已经被写入,所以必须写入一些值作为值。
相反,是对象属性决定了 inclusion/exclusion.
有了这个,JSON 过滤器 (http://www.cowtowncoder.com/blog/archives/2011/09/entry_461.html) 或许对您有用。 JSON 视图过于静态,无法进行控制。
另一种可能性是尝试使用处理 @JsonInclude
的机器。 JsonSerializer
有 isEmpty(...)
方法,用于检查类型序列化器句柄的对象是否被视为 "empty",并且可能被排除在序列化之外。如果您需要处理的类型数量有限,这可能会奏效。然而,根据最初的问题,情况可能并非如此。
还有一种可能是两阶段处理:先将POJO转成Tree Model(JsonNode
),然后遍历,去掉不该包含的。然后,序列化树模型。
在 Jackson 中根据对象的属性从序列化中排除对象的最简单方法是什么?
例如,假设 class C
的实例 o
有一个 boolean enabled
字段。如果 o.enabled == false
,则不应序列化该对象。
此外,我怎样才能使它与当前的 JSON 视图结合使用?例如,假设 class C
的实例 o
有一个 boolean topSecret
字段。如果 o.topSecret == true
,并且当前 JSON View 不是 TopSecret.class
,则不应序列化该对象。
没有执行此操作的直接功能,因为序列化的工作方式,值对象本身无法决定是否要序列化。这主要是因为 属性 name 可能已经被写入,所以必须写入一些值作为值。 相反,是对象属性决定了 inclusion/exclusion.
有了这个,JSON 过滤器 (http://www.cowtowncoder.com/blog/archives/2011/09/entry_461.html) 或许对您有用。 JSON 视图过于静态,无法进行控制。
另一种可能性是尝试使用处理 @JsonInclude
的机器。 JsonSerializer
有 isEmpty(...)
方法,用于检查类型序列化器句柄的对象是否被视为 "empty",并且可能被排除在序列化之外。如果您需要处理的类型数量有限,这可能会奏效。然而,根据最初的问题,情况可能并非如此。
还有一种可能是两阶段处理:先将POJO转成Tree Model(JsonNode
),然后遍历,去掉不该包含的。然后,序列化树模型。