Java - 使用getter / setter而不是反射来反序列化

时间:2013-12-11 13:09:21

标签: java rest jackson

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

我的pojo几乎与: Gson POJO mapping loses custom field value

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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