当前位置: 首页 > 知识库问答 >
问题:

Jackson忽略没有自定义序列化程序的空对象“{}”

翟承志
2023-03-14

我想将包含另一个空值POJO的POJO序列化为JSON。

例如,给定:

class School {
  String name;
  Room room;
}

class Room {
  String name;
}

Room room = new Room();
School school = new School("name");
school.room = room;

连载之后,它看起来会是这样的

{“name”:“name”,“room”:{}}

如果类的所有字段也为空,是否可以排除空对象{}?理想情况下,全局适用于每个对象,而无需编写自定义代码。

共有3个答案

丁成弘
2023-03-14

添加@Json包括(Include.NON_EMPTY)删除空对象:

@JsonInclude(Include.NON_EMPTY)
class School {

指示仅包含具有非空值的属性的值。

傅毅然
2023-03-14

TLDR:你想要的行为不会起作用,因为对象已经被实例化,需要为空。

Include.NON_EMPTY
Include.NON_NULL

这些选项不适用于您尝试执行的操作的原因是,您已经html" target="_blank">实例化了Room类型的Object,因此Room不是空的或null,因此您的输出:{“name”:“name”,“Room”:{}}

如果您确实想避免在JSON中表示空间,那么对象需要为空。通过设置< code>school.room = null,您将得到您想要的输出,尽管在现实世界中这可能会变得混乱,因为在将school中的room设置为null之前,您必须评估对象中的字段是否真的为null。

自定义序列化程序可以更好地处理这个问题,请参见:不要将空对象包含到Jackson

亢仰岳
2023-03-14

有点晚了,添加Json包括自定义

class School {
  String name;
  @JsonInclude(value = JsonInclude.Include.CUSTOM, valueFilter = Room .class)
  Room room;
}


@EqualsAndHashCode
class Room {
      String name;
}

这将避免在等于新 Room() 时包含空间。不要忘记在 Room 类中实现 equals 方法并包含一个空构造函数

此外,您可以使用< code>@JsonInclude( Include。NON_EMPTY )或< code>@JsonInclude( Include。NON_DEFAULT )来跳过可能的空值或空值

 类似资料:
  • 如果类的所有字段也为空,是否可以排除空对象?理想情况下,全局地用于每个对象,而无需编写自定义代码。

  • 问题内容: 我目前正在使用杰克逊2.1.4,并且在将对象转换为JSON字符串时忽略字段时遇到了一些麻烦。 这是我的类,它充当要转换的对象: 这是我如何转换它: 这是输出: 如何避免这些空值?我只想获取“订阅”目的所需的信息! 这正是我要查找的输出: 我还尝试了@JsonInclude(Include.NON_NULL)并将所有变量都设置为null,但是它也不起作用!感谢您的帮助! 问题答案: 您将

  • 下面是我的类,它充当要转换的对象: 下面是我的转换方法: 输出如下: 下面正是我要查找的输出: 我还尝试了@jsonInclude(include.non_null),并将我的所有变量置为null,但也没有起作用!谢谢你们的帮助!

  • 如何使Gson正确序列化我的密钥?

  • 问题内容: 我使用以下代码来序列化从外部服务获得的响应,并作为我的服务的一部分返回json响应。但是,当外部服务返回带有时区(10:30:00.000-05.00)的时间值时,杰克逊会将其转换为15:30:00。如何忽略时区值? 问题答案: 您可以创建自定义解串器 告诉杰克逊使用您的自定义解串器 并像这样使用它: 您可以使用Jackson自定义序列化为服务响应添加时区信息

  • 我有一个这样的对象: 我是否可以使用和我的条件来仅在不为负数的情况下包含该值?或者有没有其他的解决办法我可以做到这一点?