为我不使用自定义getter拥有的类反序列化JSON

时间:2019-06-20 00:30:00

标签: java json jackson deserialization jackson-databind

我试图反序列化我不拥有的类的对象。该类具有诸如var request = require('request') , JSONStream = require('JSONStream') , es = require('event-stream') request({url: 'http://isaacs.couchone.com/registry/_all_docs'}) .pipe(JSONStream.parse('rows.*')) .pipe(es.mapSync(function (data) { console.error(data) return data })) id_address_之类的属性名称,但其获取器是name_ getId() getAddress()()等。

当我尝试使用杰克逊反序列化JSON时,我得到

getName

似乎发生这种情况是因为杰克逊正在寻找com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "id_", not marked as ignorable 而不是getId_()。由于我不拥有基础类,因此无法使用Jackson的注释将属性映射到自定义json字段。

如何通过对象属性到其getter方法的自定义映射反序列化?

2 个答案:

答案 0 :(得分:0)

您可以尝试自定义解串器。

签出:https://www.baeldung.com/jackson-deserialization

这样,您可以为该类注册一个反序列化器。

但是,当类更改时,您仍然必须对其进行编辑。

您可以尝试的另一件事:

mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);

这将使映射器具有对私人成员的完全访问权限。

答案 1 :(得分:0)

您可以为Jackson申请 MixIn -这就是我解决了为自动生成的AVRO类(Avro generated class issue with json conversion [kotlin])尝试序列化和反序列化JSON的问题

这里是一个例子:

https://medium.com/@shankar.ganesh.1234/jackson-mixin-a-simple-guide-to-a-powerful-feature-d984341dc9e2