提问:JsonFactory的原理

情景:

        jFinal v2.2,jackson反序列化到Model提示找不到键值的错误,在Constants中设置了me.setJsonFactory(new JacksonFactory())即可成功;直接使用com.jfinal.json.Jackson反序列化依旧不行,好像是Model的attrMap中并未找到对应键值对,想知道其中原理,先谢谢大家!

评论区

JFinal

2016-08-31 11:06

jfinal 默认使用的是 JFinalJson 来做的 json 转换操作,在做转换时只对 Model 中的 Map attrs 进行处理,对 attrs 反序列化比较麻烦,代码量过大,所以暂未支持

而 JacksonFactory 反序列化使用的是 model 中的 setter 方法,而不是 Map attrs,所以反序列化比较容易,也是最常规的处理方式

JFinalJson 其实也可以去利用 setter 方法来反序列化,但已经有 jackson、fastjson 这样非常专用的工具实现了,就不再重复造轮子了,而是利用 JacksonFactory、FastjsonFactory 直接使用第三方

飞舞稻草

2016-08-31 11:10

@JFinal 感谢詹总,不过我就想知道为什么设定me.setJsonFactory(new JacksonFactory())这样就可以使用setter方法,不设定而直接使用Jackson.getObjectMapper().readValue()方法就会提示找不到对应键值呢?

飞舞稻草

2016-08-31 11:12

抱歉可能问的有点宽泛了,想知道其中程序执行的逻辑,这对我理解框架很有帮助

JFinal

2016-08-31 11:14

@飞舞稻草 建议你对比一下 jfinal 中的 Jackson.java 与自己的源码,消除差异应该就可以了,代码在: com.jfinal.json.Jackson

飞舞稻草

2016-08-31 11:17

@JFinal 源码正在看。那詹总能提供一个不设定me.setJsonFactory(new JacksonFactory())却可以直接使用Jackson反序列化到Model setter的示例吗^_^

JFinal

2016-08-31 11:20

一行代码的事:Jackson.getJson().parse(string , Xxx.class);

热门反馈

扫码入社