我偶然发现了一些将JsonIgnoreProperties添加到类中不存在但存在于JSON
中的属性的代码,例如:
@JsonIgnoreProperties({"ignoreprop"})
public class VO {
public String prop;
}
JSON
是
{ "prop":"1", "ignoreprop":"9999"}
我想知道忽略属性是否在性能方面具有任何优势,还是仅仅是冗余代码?
可用于抑制属性的序列化(在序列化期间)或忽略对JSON属性读取的处理(在反序列化期间)的注释。
编辑
是否有优势忽略特定属性(全部)
@JsonIgnoreProperties(ignoreUnknown=true)
)?
答案 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开始,此注释可以应用于类和属性。如果将两者同时使用,则实际集合将是所有无义对象的并集:也就是说,您只能添加要忽略的属性,而不能删除或覆盖。因此,您不能删除按属性注释要忽略的属性。