如果不在Json中,则不反序列化值

时间:2014-08-19 11:04:30

标签: java json jersey jackson deserialization

我定义了这个类

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请求中存在的值。 我希望我能清楚地解释我的问题,并提前感谢你的帮助。

1 个答案:

答案 0 :(得分:2)

  

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

不,这是不可能的。

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

将Java对象的字段称为没有值"这是毫无意义的。 ......就你所说的而言。对于引用类型的字段,该值必须是对某个对象的引用...或null。没有其他选择。