【问题标题】:Not deserialize value if it is not in Json如果不在 Json 中,则不反序列化值
【发布时间】:2014-08-19 11:04:30
【问题描述】:

我定义了这个类

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
}

我曾经使用杰克逊 json 处理器解析多个 json 请求。情况如下:我收到一个具有这种结构的json:

//Json A
{
    "reboot": {
        "type": "SOFT"
    }
}

我用一个名为type的私有字符串属性定义类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 请求中存在的值。 我希望我能清楚地解释我的问题,并提前感谢您的帮助。

【问题讨论】:

    标签: java json jersey jackson deserialization


    【解决方案1】:

    可以告诉jackson在反序列化期间不要设置为不在json请求(json A)中的空值吗?

    不,这是不可能的。

    确实,您的要求没有任何意义。当您通过从 JSON 反序列化或通过任何其他方式创建 PostServerActionsRequest 时,PostServerActionsRequest 实例中的每个字段 都有一个值。

    将 Java 对象的字段称为“没有价值”是毫无意义的……在您所说的意义上。对于引用类型的字段,值必须是对某个对象的引用...或null。根本没有其他选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-11
      • 1970-01-01
      相关资源
      最近更新 更多