@Deprecated SerializationFeature.WRITE_EMPTY_JSON_ARRAYS的替代方案是什么?

12

我在解决SerializationFeature.WRITE_EMPTY_JSON_ARRAYS的弃用警告时遇到了困难。

Javadocs指出:

自2.8版本以来,有更好的机制可以指定过滤;特别是使用com.fasterxml.jackson.annotation.JsonFormat或配置覆盖。

但我认为:

ObjectMapper.configure(SerializationFeature.WRITE_EMPTY_JSON_ARRAYS, false);

is是一个配置覆盖,尽管上面的一行会触发弃用警告。

有哪些其他的选择不会使模型类被另一个注释所污染?我想要全局配置行为。

2个回答

16

在类级别上,您可以使用@JsonInclude,例如:

@JsonInclude( JsonInclude.Include.NON_EMPTY )
public class MyClass ...

此外,在映射器级别,您可以执行如下操作:

mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);

3
第二种方法无法覆盖POJO上的注解,而过时的方法可以。 - Joachim Lous

1

这份 Javadoc 文档是完全错误的。

  1. "using com.fasterxml.jackson.annotation.JsonFormat": 有很多情况下注解并不是更好的选择,尤其是当你无法对 POJO 进行注解因为你不拥有它们,或者当你需要覆盖注解以获得与通常不同的行为时。

  2. "configuration overrides": 这非常好,但据我所知没有其他配置会比注解优先级更高。

从用户角度来看,废弃选项唯一的问题就是它已被废弃,因此未来可能不再受支持。当然,这是一个真正的问题——你可能会在必须选择保持代码工作而不重写代码和进行重要的安全更新之间做出选择。


1
更新:作者已经意识到了这个问题,并且在功能等效替代方案到位之前,似乎不太可能将其删除。参考:https://github.com/FasterXML/jackson-databind/issues/1547 - Joachim Lous

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接