gpt4 book ai didi

Java - 使用 getters/setters 而不是反射进行反序列化

转载 作者:太空宇宙 更新时间:2023-11-04 15:19:51 25 4
gpt4 key购买 nike

我有一个 pojo,它在调用其 setter 方法时填充隐藏变量。

我的 pojo 几乎与以下相同: Gson POJO mapping loses custom field value

我在 JAX-RS 项目中使用 jackson 1.9.6。当进行 REST 调用时,它会使用 JSON 并自动将其转换为 pojo 的实例。我相信 jackson 正在使用反射来做到这一点。这对我来说不好的原因是因为反射绕过了 setter 方法并且我的隐藏变量永远不会被填充。

我如何告诉 Jackson 避免反射并专门调用 getter/setter 方法?我是否必须使用 @JsonDeserialize 标记每个 pojo?如果是这样,我将如何编写通用反序列化器(又名 MyDeserializer extends JsonDeserializer<T> )来处理不同的 pojo?还有我没有想到的更好的方法吗?

注意:在测试用例中(REST 之外),我使用 ObjectMapper.readValue(json,class) 取得了成功。 ,但我不确定如何将该代码迁移到 JsonDeserializer 中。

最佳答案

我遇到了与此类似的问题:我正在使用 Retrofit 和 Jackson,并且反序列化 JSON key 总是忽略我带注释的 setter 并在私有(private)字段上使用反射,并且从不设置任何内容。事实证明,我需要的宝贵信息 (RTFM) 是 Retrofit 默认使用 GSON,这就是 GSON 行为。 Jackson 没有被用来反序列化。

因此您需要编写一个使用 Jackson 的 Retrofit 转换器。可以在这里找到一个例子:http://kdubblabs.com/java/retrofit-by-square/retrofit-using-jackson-json-conversion/

关于Java - 使用 getters/setters 而不是反射进行反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20520008/

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