Jackson的功能比较强大,我们这里主要使用Data Binding的方式,来看看如何使用反射将json转化为java bean,先加入如下依赖:
Jackson 的核心模块由三部分组成。
- jackson-core,核心包,提供基于"流模式"解析的相关 API,它包括 JsonPaser 和 JsonGenerator。 Jackson 内部实现正是通过高性能的流模式 API 的 JsonGenerator 和 JsonParser 来生成和解析 json。
- jackson-annotations,注解包,提供标准注解功能;
- jackson-databind ,数据绑定包, 提供基于"对象绑定" 解析的相关 API ( ObjectMapper ) 和"树模型" 解析的相关 API (JsonNode);基于"对象绑定" 解析的 API 和"树模型"解析的 API 依赖基于"流模式"解析的 API。
然后我们就可以写个demo看看:
输出:
入参都是类似的,传入json字符串和需要转化为的class,然后看看里面的方法是怎么处理的,之前还有很多预处理的方法,直接跳过吧,主要看看里面的解析的。先用createUsingDefault(DeserializationContext ctxt)返回一个使用默认构造方法创建的对象。
这里对于json的处理都放在JsonParser中,这里获取相应的类中的变量,然后使用deserializeAndSet方法设置值,现在觉得反射真是一个好东西呀,不然都不好处理,尤其是不知道都是什么类对象的情况,当然这里只是简单类对象的情况,复杂的后续再看看。
这里最后调用的_setter.invoke(instance, value)来设置变量值。