【问题标题】:How to serialize values which are provided JsonInclude.Include.NON_NULL at class level如何序列化在类级别提供的 JsonInclude.Include.NON_NULL 值
【发布时间】:2018-07-29 03:28:39
【问题描述】:

目前我的应用程序有一个类如下

@JsonInclude(JsonInclude.Include.NON_NULL)
public class Employee {
  Department department;
  String firstName;
  String lastName;
  String address;
  String phoneNumber;
}

我在将对象转换为 JSON 的日志中捕获员工对象。我能够将对象转换为 JSON,但 null 值不会进入 JSON。

我已经尝试了以下

 objectMapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);
 generator.setCodec(objectMapper);
 generator.writeObjectField(fieldName, argument);

但无法获取 JSON 中字段的空值。我如何获得它们?

【问题讨论】:

  • 我想@JsonInclude 优先。
  • 无论如何我可以得到空值吗?

标签: java json jackson fasterxml jackson-databind


【解决方案1】:

您可以复制ObjectMapper 并更改其中的一些选项,在这种情况下您可以忽略注释:

ObjectMapper mapperIgnoringAnnotations = mapper.copy()
        .disable(MapperFeature.USE_ANNOTATIONS)
        .setSerializationInclusion(JsonInclude.Include.ALWAYS)
        .setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY)

然后使用修改后的ObjectMapper 序列化这个类,但其他类的标准序列化。如果Employee 有许多您想要考虑的其他注释,则不方便。

USE_ANNOTATIONS

【讨论】:

  • 如果有getter和setter应该怎么配置??
  • Jackson 默认会分别寻找 getter 和 setter 来进行序列化和反序列化。您不必包含setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY)。如果 getter/setter 不公开,则包括此类设置,例如PropertyAccessor.GETTER
  • 好的,谢谢,你能在stackoverflow.com/questions/48885668/…上提供任何想法,面对JSONMappingexception和StackoverFlow
猜你喜欢
  • 2016-05-24
  • 2012-09-27
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多