我定义了这个类
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的私有(private)字符串属性定义类Reboot。显然,在反序列化期间, jackson 将 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>,但我的问题是,可以告诉 jackson 在反序列化期间不要设置为 json 请求(json A)中不存在的 null 值吗?这是因为我想获取一个仅包含 json 请求中存在的值的类。 我希望我能清楚地解释我的问题,并提前感谢您的帮助。
最佳答案
it's possible to tell jackson to don't set to null values that are not in json request (json A) during deserialization?
不,这是不可能的。
确实,你问的没有任何意义。当您通过 JSON 反序列化或任何其他方式创建 PostServerActionsRequest
时,PostServerActionsRequest
实例中的每个字段都有一个值(value)。
谈论 Java 对象的字段“没有值(value)”是毫无意义的……从你所说的意义上来说。对于引用类型的字段,该值必须是对某个对象的引用...或 null
。根本没有其他选择。
关于java - 如果值不是 Json 格式,则不反序列化值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25381791/