仅在JSON中使用JsonIgnoreProperties特定属性反序列化属性

时间:2018-11-20 08:52:31

标签: java json json-deserialization

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

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

JSON

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

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

  

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

编辑

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

2 个答案:

答案 0 :(得分:2)

  

我想知道忽略属性是否有任何优势

是的,它在服务中的前向兼容性中被大量使用。假设您有服务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]}

答案 1 :(得分:1)

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

  

示例:

     

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

     

//(即不包含在JSON输出中;即使已包含也被设置)    @JsonIgnoreProperties({“ internalId”,“ secretKey”})

     

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

     

从2.0开始,此注释可以应用于类和属性。如果将两者同时使用,则实际集合将是所有无义对象的并集:也就是说,您只能添加要忽略的属性,而不能删除或覆盖。因此,您不能删除按属性注释要忽略的属性。