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

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

太叔繁
2023-03-14
class School {
  String name;
  Room room;
}

class Room {
  String name;
}

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

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

共有1个答案

凌征
2023-03-14

TLDR:您想要的行为将不起作用,因为对象已经实例化,需要为NULL。

include.non_empty
include.non_null

这些选项不能用于您尝试执行的操作的原因是,您已经实例化了一个Room类型的对象,因此Room不是空的或空的,因此输出:{“name”:“name”,“Room”:{}}

如果您希望有效地避免在JSON中表示空间,那么对象需要为NULL。通过设置School.Room=null,您将获得所需的输出,但在现实世界中,这可能会变得混乱,因为在将School中的Room设置为null之前,您必须评估对象中的字段是否实际为null。

自定义序列化程序会更好地处理这一点,请参见:不要将空对象包含到Jackson

 类似资料:
  • 我想将包含另一个空值POJO的POJO序列化为JSON。 例如,给定: 连载之后,它看起来会是这样的 如果类的所有字段也为空,是否可以排除空对象?理想情况下,全局适用于每个对象,而无需编写自定义代码。

  • 问题内容: 我目前正在使用杰克逊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自定义序列化为服务响应添加时区信息

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