jfinal 官方默认给出了四种 json 实现:JFinalJson、FastJson、Jackson、MixedJson,可以满足绝大多数需求。
1、JFinalJson
JFinalJson 是 jfinal 官方最早的一个实现,这个实现最重要一点就是在转换 jfinal 的 Model 时是先获取 Model 中的 Map attrs 属性,然后再去转换这个 Map 对象。即便你的 Model 生成了 getter 方法,也不会被转换时调用。
针对Model.attrs 属性进行转换而不是利用 getter 方法进行转换有如下几个原因:
A:支持多表关联查询结果的转换
无论是Model 还是传统 Java Bean,其 getter 方法都是固定的,而多表关联查询的 sql 语句中的 select 中的字段是动态的,通常还包含关联表中的字段,而这些字段值没有相关的 getter 方法,这些字段就无法被转换
B:早期的 jfinal 用户没有为 Model 生成 getter 方法
**注意:**JFinalJson 只支持对象转 json string,不支持反向的 json string 转对象,可以通过使用 MixedJson 来支持反向转换:me.setJsonFactory(new MixedJsonFactory());
JFinal 4.9 版本对 JFinalJson 进行了彻底的重构与优化,新增了一些功能。
A、Model、Record 字段名转换为驼峰格式
JFinalJson.setModelAndRecordFieldNameToCamelCase();
大量开发者将数据库字段名命名成下划线的格式,如:"user_id",这就造成了与 java 变量名风格的不统一,对代码质量有一定损害。
上述配置只有在碰到下划线时才会对其进行转换,否则原样保留,而 oracle 用户习惯使用大写的字段名,所以需要使用如下配置:
JFinalJson.setModelAndRecordFieldNameConverter(fieldName -> {
return StrKit.toCamelCase(fieldName, true);
});
上述代码中的第二个参数 true 表示将字段名转成小写字母,而无论是否出现下划线。
B、新增 setSkipNullValueField 配置方法
该方法用于去除 null 值字段的转换:
JFinalJson.setSkipNullValueField(true);
C、新增 addToJson 扩展方法
该方法可以细粒度地对任意类型的转换进行扩展:
JFinalJson.addToJson(Timestamp.class, (value, depth, ret) -> {
ret.addLong(((Timestamp)value).getTime());
});
以上扩展代码,将 Timestamp 类型转换成 long 值。
2、FastJson
FastJson 是对第三方的 fastjson 进行的二次封装,该实现最重要的一点就是转换依赖于 Model、java bean 的 getter 方法。使用 fastjson 可以按照其官方文档去配置 fastjson 的各种转换参数。
使用FastJson 封装时,需要添加其依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.68</version>
</dependency>
3、Jackson
该实现与 FastJson 类似,是对第三方的 jackson 的二次封装
使用Jackson 封装时,需要添加其依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.0</version>
</dependency>
4、MixedJson
MixedJson 是对 JFinalJson、FastJson 的再一次封装,Object 转 json string 时使用 JFinalJson 的实现,而反向 json string 转 Object 使用 FastJson。
这个实现结合了 JFinalJson 与 FastJson 两者的优势。 前者不支持 json string 到 Object 的转换,后者不支持关联表 sql 查询动态字段的转换。
使用MixedJson 封装时需要添加 FastJson 封装的依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.68</version>
</dependency>
版权声明:「DDKK.COM 弟弟快看,程序员编程资料站」本站文章,版权归原作者所有
JFinal 官方 | https://jfinal.com