gpt4 book ai didi

java - 向字段添加冗余的@JsonProperty值注释是否会提高反序列化性能?

转载 作者:行者123 更新时间:2023-11-30 03:18:30 25 4
gpt4 key购买 nike

我正在使用 Jackson (2.6.0) 将 JSON 请求反序列化为简单的 POJO。我已经在 POJO 中实现了所有 setter 方法来微调分配。 JSON 中的某些字段名称相当神秘,例如 seq。我想将我的 java 类字段命名为 layoutSequnce

我知道要执行此操作,我只需将我的字段注释为:

@JsonProperty("seq")
private int layoutSequence;

我的问题是对于不需要重命名的 JSON 字段,例如 title,将其注释为是否有任何最小的性能优势:

@JsonProperty("title")
private String title;

我的问题源于我对 jackson 在幕后工作方式的理解。我假设 Jackson 使用反射来内省(introspection)地检查我的 POJO 并识别它尝试从 JSON 值分配的当前字段。通过这种方法,我假设它必须进行一些搜索才能找到匹配项,这会产生一些少量的开销。

如果我直接指定字段名称,Jackson 是否会盲目地尝试使用与我已识别的字段名称模式(本例中为 setTitle())匹配的 setter 来初始化我的字段在注释中?或者它仍然执行内部类搜索来验证方法的存在吗?

最佳答案

不,它不应该提高性能。内省(introspection)仅执行一次,用于构建 JsonDeserializer,并且在此初始时间之后不会执行。注解内省(introspection)(甚至只是一般字段、方法内省(introspection))是相当昂贵的操作,因此序列化器/反序列化器会被积极缓存以避免多次执行。

唯一需要重复查找的情况是构造新的 ObjectMapper 时,即不重用/共享少量(最好是一个)映射器时。ObjectReader 的不同之处在于,开销非常小,因为它们与创建它们的 ObjectMapper 共享缓存的反序列化器,因此无需重用它们。但映射器需要重用。

关于java - 向字段添加冗余的@JsonProperty值注释是否会提高反序列化性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31924801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com