1

我们最近从 Jackson json 2.8.2 迁移到 2.9.4,我们看到行为发生了重大变化。我们使用的是 JDK 1.8。

早些时候,我们在对象映射器级别将序列化包含设置为 NON_DEFAULT,并且一切正常。

现在更改为 2.9.2 后,NON_DEFAULT 会忽略所有默认值,例如布尔值 false、整数 0、...。这破坏了我们的测试用例。

我们的要求是只忽略空字段和返回为 [] 的空白字段。

但是我们仍然不想忽略空字符串,例如 test = ""

我们尝试了 non_empty、non_absent 都忽略了每个字段(null、[]、“”)。

您能否建议我们如何自定义序列化行为以满足我们的要求?如果您需要更多详细信息,请告诉我。

4

1 回答 1

0

几种方法:

  1. 为 type 指定不同的设置String.class:看ObjectMapper.configOverrides(String.class);有一个设置器JsonInclude.Value(类型有各种工厂方法)。您可以将其设置为JsonInclude.Include.NON_NULL(或ALWAYS),即使默认值是别的
  2. 注册自定义序列化程序String,覆盖/重新定义其isEmpty(SerializerProvider, String)方法不考虑空字符串作为empty排除的目的
于 2018-04-17T17:53:31.540 回答