文档章节

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

超龍
 超龍
发布于 2017/09/03 09:32
字数 646
阅读 224
收藏 1
点赞 1
评论 0

在开发项目的时候,数据库的字段命名一般都是带下划线的,如果是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
朝阳
OSC上关于Jfinal的提问整理(一)

看见Jfinal很火,就手痒痒了,想学一下,无奈入门较慢,没有找到比较全的文档。于是就经常看讨论区大家的提问与解答。后来就忽然萌生了整理下来的想法。其中的问题如果是@Jfinal 回答的,那我...

木川瓦兹
2013/04/23
0
21
OSC上关于Jfinal的提问整理(二)

1.【问】:Db.tx(new IAtom())事务不起作用? 【jfinal答】:1:如果使用的mysql,确保引擎为 InnoDB 2:这行代码改一下Db.save(c3p0Plugin.getDataSource(), "tbtest", "PKID", record);去掉...

木川瓦兹
2013/04/25
0
2
JAVA 极速WEB+ORM框架 - JFinal

JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python、p...

JFinal
2012/03/18
0
496
JFinal针对ORACLE的timestamp字段解决办法

JFinal是个比较不错的的框架,但JFinal起源时使用mysql数据库,因此在对数据库支持方面还没有达到完美。 本人使用JFinal有一段时间的,由于项目的数据库普遍采用oracle,在使用oracle过程中遇...

真的农夫三拳
2013/06/23
0
6
jfinal扩展之csvRander

近段时间,在jfinal-ext基础上,完成了一个csvRender。其实我很少用csv文件存数据,所以在Render实现后,把代码贴在了github上,希望大家能帮忙斟酌下。csvRender可以把List<T> (其中T包括A...

kyle1970
2012/11/08
0
5
JFinal独创Db + Record模式示例

JFinal配备的ActiveRecord插件,除了实现了类似Rails ActiveRecrod的功能之外,还独创了Db + Record模式,此模式下,开发者可以连Model都不需要写就可以轻松操作数据库。 以下是示例代码: ...

JFinal
2012/03/19
0
46
JFinal 3.4 发布,将极速贯彻到 UI 层

jfinal 的终极目标是全面实现软件开发整个过程的极速开发,极大提升开发效率,极大降低学习成本,极大提升开发体验 jfinal 诞生头五年,已实现 WEB + ORM + AOP 层面的极速开发,赢得了大量开...

JFinal
04/28
0
129
最近在做的一件事件编写JFinal教程《Jfinal极速开发实战》

从8月1号开始,整整一个月,初稿完成,朋友帮我第一次文字校对完成,现在正在根据波总的意见修改一些jfinal的设计原则说明 Jfinal、JfinalUIB学习交流QQ群:309647612 已经完成,前四章免费阅...

littleant
2015/08/20
0
12
JFinal 中使用 Dubbo —— 1 改造JFinal Demo

Dubbo Demo概述 此Demo实际在2014年上半年就已经完成了,只是到最近才有时间和心情写完此文。同时,将JFinal升级到了1.9,并采用Maven构建项目。 另外,仔细想了想,Provider其实可以不依托T...

糊搞
2015/04/20
0
16
jFinal+AngularJs未来javaEE开发的趋势——程序员的福音

最近有意无意、机缘巧合之下认识了两个新的WEB框架,其中一个是后端框架叫JFinal,看名字就让人觉得为之一振,最后的、最终的,没错它的意思就是“我是JavaEE的终极框架”,没有比这更好的啦...

moz1q1
2014/08/05
0
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaEE——JavaScript

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 JavaScript 内置对象 String对象方法: date对象...

凯哥学堂
6分钟前
0
0
Git 远程代码回滚master

方式一(推荐): git revert commit-id 方式二(不推荐):不推荐原因:推送到线上后,其它开发人员需要重新clone git reset --hard commit-id git push origin HEAD --force...

浮躁的码农
6分钟前
0
0
Elasticesearch学习(7)—— ES查询与Java API的对应关系

1、普通查询 类型 ES查询语句 Java查询实现 结果 查询格式 { "query": { "bool": { "must": [], "must_not": [], "should": [], "filter": [] } }, "from": 0, "size": 10, "sort": [] } Que......

叶枫啦啦
7分钟前
4
0
getElementsByClassName()与getElementById()区别

1.document.getElementsByClassName() 返回的是数组 使用:document.getElementsByClassName("className")[0].innerText='具体内容' 2.document.getElementById() 返回的是单个元素 使用:d......

botkenni
17分钟前
0
0
MyBatis入门

一、安装 <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>x.x.x</version></dependency> 二、从 XML 中构建 SqlSessionFactory String r......

一个yuanbeth
18分钟前
0
0
聊聊spring cloud的LoadBalancerAutoConfiguration

序 本文主要研究一下spring cloud的LoadBalancerAutoConfiguration RibbonAutoConfiguration spring-cloud-netflix-ribbon-2.0.0.RC2-sources.jar!/org/springframework/cloud/netflix/ribb......

go4it
21分钟前
0
0
【转】使用Lombok来优雅的编码

前言 Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注解实现这一目的。 正文 添加依赖 在 pom.xml 文件中添加相关依赖:...

HAVENT
23分钟前
0
0
Dubbo 源码解读 —— 可支持序列化及自定义扩展

一、概述 从源码中,我们可以看出来。目前,Dubbo 内部提供了 5 种序列化的方式,分别为 fastjson、Hessian2、Kryo、fst 及 Java原生支持的方式 。 针对不同的序列化方式,对比内容如下: 名...

Ryan-瑞恩
30分钟前
0
0
MySQL内存设置—— MySQL server has gone away

set global max_allowed_packet=268435456

一梦心草
40分钟前
0
0
推导式

列表、集合和字典推导式 列表推导式是Python最受喜爱的特性之一。它允许用户方便的从一个集合过滤元素,形成列表,在传递参数的过程中还可以修改元素。形式如下: [expr for val in collect...

火力全開
45分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部