文档章节

Jfinal Model和Record输出json驼峰命名转换

超龍
 超龍
发布于 2017/09/03 09:32
字数 646
阅读 456
收藏 1

在开发项目的时候,数据库的字段命名一般都是带下划线的,如果是oracle的话还可能是大写,所以jfinal框架在输出json的时候会有一些不爽,假如我们开发接口需要提供给用户的是驼峰命名的json,那该怎么处理呢?

写一个工具类:

import com.jfinal.core.Controller;
import com.jfinal.kit.JsonKit;
import com.jfinal.kit.Ret;
import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Model;
import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.Record;

import org.apache.commons.lang3.StringUtils;
import java.util.List;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

/**
* Created by yongchao on 2017/2/22.
*/
public class ControllerUtils {

/**
* 乐观锁验证
*
* @param controller
* @param tableName 数据库表名
* @return
*/
public static String validateIdAndVersion(Controller controller, String tableName) {
String id = controller.getPara(“id”);
if (StrKit.isBlank(id)) {
id = controller.getPara(“id_”);
}
if (StrKit.isBlank(id))
return null;
String version = controller.getPara(“version”);
if (StrKit.isBlank(version)) {
version = controller.getPara(“rev”);
}
if (null == version)
return null;
if (!StringUtils.isNumeric(version)) {
return “version参数只能是数字!”;
}
Record record = Db.findById(tableName, id);
if (null == record) {
return “根据id查询不到数据!”;
}
if (null == record.get(“VERSION”))
return null;
if (record.get(“VERSION”) != Integer.valueOf(version)) {
return “表单数据版本号和数据库数据版本号不一致,可能数据已经被其他人修改,请重新编辑!”;
}
return null;
}

/**
* 把model转为map,驼峰命名
*
* @param model
* @return
*/
public static Map<String, Object> modelToCamelCaseMap(Model model) {
if (null == model) {
return null;
}
String[] keys = model._getAttrNames();
Map<String, Object> map = new HashMap<>();
for (String key : keys) {
Object value = model.get(key);
key = StrKit.toCamelCase(key.toLowerCase());
//避免输出null的json,过滤掉空值
if(null != value){
map.put(key, value);
}

}
return map;
}

/**
* Record转为Map,驼峰命名
*
* @param record
* @return
*/
public static Map<String, Object> recordToCamelCaseMap(Record record) {
if (null == record) {
return null;
}
String[] keys = record.getColumnNames();
Map<String, Object> map = new HashMap<>();
for (String key : keys) {
Object value = record.get(key);
key = StrKit.toCamelCase(key.toLowerCase());
//避免输出null的json,过滤掉空值
if(null != value){
map.put(key, value);
}
}
return map;
}

/**
* List<Record>转为List<Map<String, Object>>,驼峰命名
*
* @param records
* @return
*/
public static List<Map<String, Object>> recordsToCamelCaseMaps(List<Record> records) {
List<Map<String, Object>> maps = new ArrayList<>();
for (Record record : records) {
maps.add(recordToCamelCaseMap(record));
}
return maps;
}

/**
* List<? extends Model>转为List<Map<String, Object>>,驼峰命名
*
* @param models
* @return
*/
public static List<Map<String, Object>> modelsToCamelCaseMaps(List<? extends Model> models) {
List<Map<String, Object>> maps = new ArrayList<>();
for (Model model : models) {
maps.add(modelToCamelCaseMap(model));
}
return maps;
}

/**
* Page<Record>转为Page<Map<String, Object>>,驼峰命名
*
* @param records
* @return
*/
public static Page<Map<String, Object>> recordsToCamelCaseMaps(Page<Record> records) {
List<Record> recordList = records.getList();
List<Map<String, Object>> maps = new ArrayList<>();
for (Record record : recordList) {
maps.add(recordToCamelCaseMap(record));
}
return new Page<Map<String, Object>>(maps, records.getPageNumber(), records.getPageSize(),
records.getTotalPage(), records.getTotalRow());
}

/**
* Page<Page<? extends Model>转为Page<Map<String, Object>>,驼峰命名
*
* @param models
* @return
*/
public static Page<Map<String, Object>> modelsToCamelCaseMaps(Page<? extends Model> models) {
List<? extends Model> modelList = models.getList();
List<Map<String, Object>> maps = new ArrayList<>();
for (Model model : modelList) {
maps.add(modelToCamelCaseMap(model));
}
return new Page<Map<String, Object>>(maps, models.getPageNumber(), models.getPageSize(), models.getTotalPage(),
models.getTotalRow());
}

}

 

使用方法:

List<Bean>类型数据的json驼峰命名转换:ControllerUtils.modelToCamelCaseMap方法即可
Page<Record>类型数据的json驼峰命名转换:用ControllerUtils. recordsToCamelCaseMaps方法即可。

 

© 著作权归作者所有

共有 人打赏支持
超龍
粉丝 1
博文 30
码字总数 8618
作品 0
朝阳
私信 提问
JFinal 2.2 发布,用 JFinal 开发,就这么定了!

JFinal 2.2 主要针对于 2.1 版本中反馈集中的几个问题进行改进,另外也让jfinal 2.1非最终版用户升为统一的版本。 1:改进paginate 在2.1 版中使用了正则对paginate方法匹配 select 与 grou...

JFinal
2016/01/19
15.8K
91
jfinal中怎样把 model 和数据表中的字段映射起来,以便生成 json.

jfinal中怎样把 model 和数据表中的字段映射起来,以便生成 json. 文档里面有提到说建议 table 中也采用驼峰命名, 可是现在的系统是要兼容之前老的. 没有找到合适的实现方案. @jfinal...

采蘑菇的大叔
2017/03/13
439
3
JFinal 2.1 发布,用 JFinal 开发,就这么定了!

JFinal 2.1 将带给大家超过60项增强与改进,此次升级核心目的,一是全面解救传统SSH开发者,强力推动这些早已累成狗的工程师转投 JFinal 怀抱,二是与老用户建立更深的情感,答谢你们长久以来...

JFinal
2015/12/29
25K
354
Jfinal如何支持自定义model类型?

@JFinal 波总你好: 又来打扰你了。之前已经就一些问题与你有过沟通。 我这边需要自定义model类型,用来继承model,主要目的是引入领域模型思想。按照model进行职责隔离。 请问波总,Jfinal中...

天生蛋疼菊紧
2015/04/28
517
6
JFinal 1.5 发布,JAVA极速WEB+ORM框架

JFinal 爱好者一直都在问 JFinal 何时再次升级?JFinal 1.5 何时发布?以往升级都保持在每月近两次的频率,为何本次五个月过去了新版本还不出?由于作者暂时阔别码坛已有半年时间,一直无暇顾...

JFinal
2013/10/08
7.2K
101

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周二乱弹 —— 以后我偷小鱼干养你

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @庞巴哥 :只有这节奏瞬间变得轻松。。。。。。。。。分享Talking Eyes的单曲《In the sun (Extended Version)》: 《In the sun (Extended Ve...

小小编辑
今天
2
0
多表查询

第1章 多表关系实战 1.1 实战1:省和市  方案1:多张表,一对多  方案2:一张表,自关联一对多 1.2 实战2:用户和角色 (比如演员和扮演人物)  多对多关系 1.3 实战3:角色和权限 (比如...

stars永恒
今天
7
0
求推广,德邦快递坑人!!!!

完全没想好怎么来吐槽自己这次苦逼的德邦物流过程了,只好来记一个流水账。 从寄快递开始: 2019年1月15日从 德邦物流 微信小app上下单,截图如下: 可笑的是什么,我预约的是17号上门收件,...

o0无忧亦无怖
昨天
10
0
Mac Vim配置

1.升级 vim   我自己 MacBook Pro 的系统还是 10.11 ,其自带的 vim 版本为 7.3 ,我们将其升至最新版: 使用 homebrew : brew install vim --with-lua --with-override-system-vim 这将下...

Pasenger
昨天
9
0
vmware安装Ubuntu上不了网?上网了安装不了net-tools,无法执行ifconfig?

1.重新设置网络适配器还是不行,如下指定nat 2.还需要指定共享网络,我是在无线环境下 3.无法执行ifconfig https://packages.ubuntu.com/bionic/net-tools到这个网站下载net-tools的deb文件...

noob_chr
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部