【问题标题】:Use of JsonIgnoreProperties specific property deserialize properties exists only in JSON使用 JsonIgnoreProperties 特定属性反序列化属性只存在于 JSON
【发布时间】:2023-03-24 13:33:01
【问题描述】:

我偶然发现了一些将JsonIgnoreProperties 添加到类中不存在但存在于JSON 中的属性的代码,例如:

@JsonIgnoreProperties({"ignoreprop"})
public class VO {
   public String prop;
}

JSON

{ "prop":"1", "ignoreprop":"9999"}

我想知道忽略属性在性能方面是否有任何优势,还是只是冗余代码?

可用于抑制属性序列化(序列化期间)或忽略 JSON 属性读取处理(反序列化期间)的注释。

编辑

忽略特定属性是否有优势(与 @JsonIgnoreProperties(ignoreUnknown=true))?

【问题讨论】:

    标签: java json json-deserialization


    【解决方案1】:

    我想知道忽略属性是否有任何好处

    是的,它被大量用于服务中的前向兼容性。假设您有服务 A 和 B。目前 A 使用一些 JSON 对象向 B 发送请求。
    现在您想在 JSON 中支持一个新属性。如果你有这个功能,你可以让 A 在 B 知道如何处理它之前开始发送新属性。 解耦这两个服务的开发过程。

    忽略所有特定属性

    这种情况确实有一些小的性能优势。首先,它不会尝试解析这个可以是简单字符串或复杂对象/数组的属性。其次,它可以帮助您避免处理异常。认为以下所有都可以是有效的调用,你只关心prop

    { "prop":"1", "ignoreprop":"9999"}
    
    { "prop":"1", "ignoreprop":{ "a": { "key": "value", "foo": false }}}
    
    { "prop":"1", "ignoreprop":[1,2,3,4,5,6..... 1000000]}
    

    【讨论】:

    • 忽略特定属性是否有优势(使用@JsonIgnoreProperties(ignoreUnknown=true))?
    • @user7294900 - 编辑以回答您的具体问题
    • 所以ignoreUnknown 会尝试在ignoreprop 内部进行解析,尽管它不是类中的属性?
    【解决方案2】:

    从文档来看,使用它的主要目的是毫无例外地忽略JSON输入中的任何未知属性:最好不要在类或JSON中找不到属性时弹出异常,这可能有助于更快地序列化docs

    例子:

    // 防止指定字段被序列化或反序列化

    // (即不包含在 JSON 输出中;或者即使包含它们也被设置) @JsonIgnoreProperties({ "internalId", "secretKey" })

    // 无一例外地忽略 JSON 输入中的任何未知属性: @JsonIgnoreProperties(ignoreUnknown=true)

    从 2.0 开始,这个注解可以应用于类和属性。如果同时使用,实际设置将是所有忽略的联合:也就是说,您只能添加要忽略的属性,不能删除或覆盖。因此,您不能使用 per-property annotation 删除要忽略的属性。

    【讨论】:

    • 可以添加文档链接吗?如果我想忽略十几个属性是不是更好?
    • 是的,您可以将它们全部添加到注释中,或者简单地添加 @JsonIgnoreProperties(ignoreUnknown=true),如果有多个属性,我会推荐 unknown=true
    • 忽略特定属性是否有优势(使用@JsonIgnoreProperties(ignoreUnknown=true))?
    • 让我们直截了当,你得到100个字段的JSON,你只需要5个字段,那么建议设置ignoreUnknown=true)还是指定每个字段?,它完全取决于要求,这个注释完全避免了未知字段的异常,这是@user7294900的主要意图
    • 我只是想知道在ignoreUnknown=true 应该覆盖特定属性时是否有真正的理由/优势来忽略它(并且会灵活)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    相关资源
    最近更新 更多