java - 如果值不是 Json 格式,则不反序列化值

标签 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的私有(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/

相关文章:

java - 使用 JAX-RS 定义自定义参数类型以按标识符返回数据

jersey - GCM : java. lang.NoClassDefFoundError:com/google/android/gcm/server/Sender

java - 测试时使用 spring messagesource

json - swift 对象映射器 : toJSONString for a dictonary containing mappable Object

java - 如何在 JerseyTest 中将我的实体编码为 JSON?

php - jquery ajax使用php json编码获取数据库结果

javascript - 单击保存多次

java - 严重 : Allocate exception for servlet <myservlet-name> java. lang.ClassNotFoundException:<myservlet> 异常

Java:如何处理图形?

java - NetBeans 中的文本字段禁用