文档章节

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

fuwu360123
 fuwu360123
发布于 2017/09/03 09:32
字数 646
阅读 2K
收藏 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方法即可。

 

fuwu360123
粉丝 1
博文 10
码字总数 2981
作品 0
朝阳
私信 提问
加载中
请先登录后再评论。
beego API开发以及自动化文档

beego API开发以及自动化文档 beego1.3版本已经在上个星期发布了,但是还是有很多人不了解如何来进行开发,也是在一步一步的测试中开发,期间QQ群里面很多人都问我如何开发,我的业余时间实在...

astaxie
2014/06/25
2.7W
22
5分钟 maven3 快速入门指南

前提条件 你首先需要了解如何在电脑上安装软件。如果你不知道如何做到这一点,请询问你办公室,学校里的人,或花钱找人来解释这个给你。 不建议给Maven的服务邮箱来发邮件寻求支持。 安装Mav...

fanl1982
2014/01/23
1.2W
7
代码生成器--Codgen

Codgen是一个基于数据库元数据模型,使用freemarker模板引擎来构建输出的代码生成器。freemarker的数据模型结构通常来说都是一个Map树状结构模型,codgen也不例外,它的数据模型这棵树的根节...

黄天政
2013/01/29
1.4W
2
Web开发组件管理器--Bower

Bower 是一个针对Web开发的包管理器。该工具主要用来帮助用户轻松安装CSS、JavaScript、图像等相关包,并管理这些包之间的依赖。 功能有些类似于Component。不同之处是,Component是围绕Git...

匿名
2013/02/01
1.2W
2
集群存储系统--YFS

YFS集群存储系统由多个元数据服务器(MDS)、多个块数据服务器(CDS)和多个客户端(client)互联组成集群; 数据被分成64M固定大小的数据块(Chunk),每个数据块在CDS本地以常规文件的形式...

匿名
2013/02/19
1.8K
0

没有更多内容

加载失败,请刷新页面

加载更多

发布新版首页“外婆新家”升级版:全新的UI,熟悉的味道

在7月30日我们我们忐忑不安地发布了新版网站首页,发布后迎接我们的不是新颜新风貌的惊喜,而是我们最担心的残酷现实——“让我们等这么多年,等来的就是这个新的丑容颜”,在大家的批评声中...

osc_8grrbqh4
13分钟前
0
0
markLine 标示线的使用

markLine 可以单独写在一个对象里,也可以接在其它数据下面,如果将 markLine 单独写在一个对象里,就必须加 type ,不然报错。 markLine 的 data 和其它 data 一样,也可以单独设置样式。 ...

osc_z3aalppw
15分钟前
0
0
新的日记 ~

新开一个日记本,以后都用这个好啦(真的以后都用这个了……)。 放一下旧的日记: 日记 2018 下半年:https://www.cnblogs.com/nanjoqin/p/9885681.html 日记 2019 上半年:https://www.cnb...

osc_tj0is418
17分钟前
0
0
ROC与AUC曲线绘制

由于ROC曲线面积比较难求得,所以判断模型好坏一般使用AUC曲线 关于AUC曲线的绘制,西瓜书上写得比较学术,不太能理解,假设有这么一个样本集: 假设预测样本为20个,预测为正类的概率已经进...

osc_votswz18
18分钟前
6
0
IDEA 2020.2 稳定版发布,带来了不少新功能...

点击上方“朱小厮的博客”,选择“设为星标” 后台回复"书",获取 来源 | https://www.oschina.net/news/117535/intellij-idea-2020-2-released IntelliJ IDEA 2020.2 稳定版已发布,此版本带...

osc_hr0pxr5d
19分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部