我定义了这个类
public class PostServerActionsRequest {
private ChangePassword changePassword;
private Reboot reboot;
private Rebuild rebuild;
private Resize resize;
private String confirmResize;
private String revertResize;
private CreateImage createImage;
//constructor + getter & setter
}
我曾经使用jackson json处理器解析多个json请求。情况如下:我收到一个具有这种结构的json:
//Json A
{
"reboot": {
"type": "SOFT"
}
}
其中我使用名为 type 的私有String属性定义类Reboot。显然,在反序列化期间,杰克森将json中相对等价的属性设置为null。所以序列化我得到这个json:
//Json B
{
"changePassword": null,
"reboot": {
"type": "SOFT"
},
"rebuild": null,
"resize": null,
"confirmResize": null,
"revertResize": null,
"createImage": null
}
现在我知道如何告诉jackson在序列化期间忽略null或空值,例如在类 PostServerActionsRequest 上面注释 @JsonSerialize(include = JsonSerialize.Inclusion.NON_DEFAULT) em>,但我的问题是,有可能告诉杰克逊在反序列化期间没有设置为不在json请求(json A)中的空值吗?这是因为我想获取一个类只有json请求中存在的值。 我希望我能清楚地解释我的问题,并提前感谢你的帮助。
答案 0 :(得分:2)
可以告诉杰克逊在反序列化期间不设置为json请求(json A)中的空值吗?
不,这是不可能的。
事实上,你所要求的并没有任何意义。当您通过从JSON反序列化或通过任何其他方式创建PostServerActionsRequest
时,PostServerActionsRequest
实例中的每个字段都具有值。
将Java对象的字段称为没有值"这是毫无意义的。 ......就你所说的而言。对于引用类型的字段,该值必须是对某个对象的引用...或null
。没有其他选择。