12.3 Json 的四个实现

  1. jfinal 官方默认给出了三种 json 实现,可以满足绝大多数需求。

1、JFinalJson

  1. JFinalJson jfinal 官方最早的一个实现,这个实现最重要一点就是在转换 jfinal Model 时是先获取 Model 中的 Map attrs 属性,然后再去转换这个 Map 对象。即便你的 Model 生成了 getter 方法,也不会被转换时调用。
  2. 针对 Model.attrs 属性进行转换而不是利用 getter 方法进行转换有如下几个原因:

A:支持多表关联查询结果的转换

  1. 无论是 Model 还是传统 Java Bean,其 getter 方法都是是固定的,而多表关联查询的 sql 语句中的 select 中的字段是动态的,通常还包含关联表中的字段,而这些字段值没有相关的 getter 方法,这些字段就无法被转换

B:早期的 jfinal 用户没有为 Model 生成 getter 方法

注意:JFinalJson 只支持对象转 json string,不支持反向的 json string 转对象,可以通过使用 MixedJson 来支持反向转换:me.setJsonFactory(new MixedJsonFactory());

2、FastJson

  1. FastJson 是对第三方的 fastjson 进行的二次封装,该实现最重要的一点就是转换依赖于 Modeljava bean getter 方法。使用 fastjson 可以按照其官方文档去配置 fastjson 的各种转换参数。

3、Jackson

  1. 该实现与 FastJson 类似,是对第三方的 jackson 的二次封装

4、MixedJson

  1. MxiedJson 是对 JFinalJsonFastJson 的再一次封装,Object json string 时使用 JFinalJson 的实现,而反向 json string Object 使用 FastJson
  2. 这个实现结合了 JFinalJson FastJson 两者的优势。 前者不支持 json string Object 的转换,后者不支持关联表 sql 查询动态字段的转换。

< 12.2 Json 配置

13.1 概述 >

原文: http://www.jfinal.com/doc/12-3