杰克逊:根据其属性从序列化中排除对象

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 的机器。 JsonSerializerisEmpty(...) 方法,用于检查类型序列化器句柄的对象是否被视为 "empty",并且可能被排除在序列化之外。如果您需要处理的类型数量有限,这可能会奏效。然而,根据最初的问题,情况可能并非如此。

还有一种可能是两阶段处理:先将POJO转成Tree Model(JsonNode),然后遍历,去掉不该包含的。然后,序列化树模型。