Amb*_*mbi 11 java json jackson
我想将包含另一个具有空值的 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;
Run Code Online (Sandbox Code Playgroud)
序列化后它看起来像这样
{ "name": "name", "room": {}}
{}如果类的所有字段也都是空的,是否可以排除空对象?理想情况下,无需编写自定义代码即可对每个对象进行全局处理。
小智 8
有点晚了,添加 JsonIninclude 自定义
class School {
String name;
@JsonInclude(value = JsonInclude.Include.CUSTOM, valueFilter = Room .class)
Room room;
}
@EqualsAndHashCode
class Room {
String name;
}
Run Code Online (Sandbox Code Playgroud)
如果 等于 ,这将避免包含空间new Room()。不要忘记在 Room 类中实现 equals 方法并包含一个空的构造函数
此外,您可以在类级别使用@JsonInclude( Include.NON_EMPTY )或来跳过可能的空值或空值@JsonInclude( Include.NON_DEFAULT )
小智 4
TLDR:您想要的行为将不起作用,因为对象已被实例化,需要为空。
Include.NON_EMPTY
Include.NON_NULL
这些选项不适用于您想要执行的操作的原因是因为您已经实例化了 Room 类型的对象,因此 Room 不为空或为 null,因此您的输出:{ "name": "name", "room": {}}
如果您实际上希望避免在 JSON 中表示 Room,则该对象需要为 null。通过设置,school.room = null您将获得所需的输出,但在现实世界中,这可能会变得混乱,因为您必须在将 School 中的 Room 设置为空之前评估对象中的字段是否实际上为空。
自定义序列化器可以更好地处理这个问题,请参阅:Do not includeempty object to Jackson
| 归档时间: |
|
| 查看次数: |
3791 次 |
| 最近记录: |