java继承JSONobject_DTO改造为JsonObject
曾经有个项目,遇到一个情况就是DTO需要“频繁”的转成JsonObject进行传递(因为用的框架是 Vert.x,用EventBus通信)存在明显的性能消耗。或者使用框架带的DTO自定义,但是一看就没麻烦就没有操作。
需要频繁的操作如下:
JSONObject jo= (JSONObject) JSONObject.toJSON(fooBean);
FooBean fooBean= (FooBean)JSONObject.toBean(jo, FooBean.class);
为了提高性能,做的就是改造DTO,思路如下:
本来DTO的属性是本来是以全局变量存在各自的类中,现在把这类全部去掉,改成维护在JsonObject 中。因为操作相同,把所有的DTO都改成继承同一个基础的DTO ,在基础的DTO中统一维护。
1.为了适配其他框架的实例化,还是要保留相应的get/set,但是get/set操作的其实是JsonObject
2.为了非String类型的数据,做相关方法的改写。
//-----------BaseJsonDTO .java-----
public class BaseJsonDTO {
private static Logger logger = LoggerFactory.getLogger(RespGenerator.class);
private static DateTimeFormatter standDateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
private static DateTimeFormatter standDateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
@JsonIgnore
protected JsonObject jsonObject;
public BaseJsonDTO() {
jsonObject = new JsonObject();
}
public BaseJsonDTO(JsonObject jsonObject) {
this.jsonObject = jsonObject;
}
public JsonObject getJsonObject() {
return jsonObject;
}
public void setJsonObject(JsonObject jsonObject) {
this.jsonObject = jsonObject;
}
/***
* @Description
* @Params 日期操作
* @Returns java.time.LocalDateTime
*/
public LocalDateTime parseLocalDateTime(String key) {
return StringUtils.isEmpty(this.jsonObject.getString(key)) ? null : LocalDateTime.parse(this.jsonObject.getString(key), standDateTimeFormatter);
}
/***
* @Description
* @Params 日期操作2 没有时分秒
* @Returns java.time.LocalDate
*/
public LocalDate parseLocalDate(String key) {
return StringUtils.isEmpty(this.jsonObject.getString(key)) ? null : LocalDate.parse(this.jsonObject.getString(key), standDateFormatter);
}
/***
* @Description
* @Params 日期操作
* @Returns java.time.LocalDateTime
*/
public void putLocalDateTime(String key, LocalDateTime localDateTime) {
this.jsonObject.put(key, localDateTime == null ? null : localDateTime.format(standDateTimeFormatter));
}
/***
* @Description
* @Params 日期操作2 没有时分秒
* @Returns java.time.LocalDate
*/
public void putLocalDate(String key, LocalDate localDate) {
this.jsonObject.put(key, localDate == null ? null : localDate.format(standDateFormatter));
}
public static JsonArray parseList(List list) {
if (list == null) {
return null;
}
JsonArray jsonArray = new JsonArray();
for (T t : list) {
jsonArray.add(t.getJsonObject());
}
return jsonArray;
}
public static List parseJsonArray(JsonArray jsonArray, Class objectClass) {
if (jsonArray == null) {
return new ArrayList();
}
List result = new ArrayList<>();
for (Iterator iter = jsonArray.iterator(); iter.hasNext(); ) {
JsonObject jsonObject = (JsonObject) iter.next();
T t = null;
try {
t = objectClass.newInstance();
} catch (InstantiationException e) {
logger.error("", e);
} catch (IllegalAccessException e) {
logger.error("", e);
}
t.setJsonObject(jsonObject);
result.add(t);
}
return result;
}
}
//-----------CallNumDTO.java-----
public class CallNumDTO extends BaseJsonDTO {
public CallNumDTO() {
super();
}
public CallNumDTO(JsonObject jsonObject) {
super(jsonObject);
}
public static final String _APPID = "appId";
public static final String _NUMS= "nums";
public static final String _PRODUCTNAME = "productName";
public static final String _PRIVACY = "privacy";
public String getAppId() {
return this.jsonObject.getString(_APPID);
}
public void setAppId(String appId) {
this.jsonObject.put(_APPID,appId);
}
public List getNums() {
return this.jsonObject.getJsonArray(_NUMS).getList();
}
public void setNums(List nums) {
this.jsonObject.put(_NUMS, new JsonArray(nums));
}
public String getProductName() {
return this.jsonObject.getString(_PRODUCTNAME);
}
public void setProductName(String productName) {
this.jsonObject.put(_PRODUCTNAME,productName);
}
public String getPrivacy() {
return this.jsonObject.getString(_PRIVACY);
}
public void setPrivacy(String privacy) {
this.jsonObject.put(_PRIVACY,privacy);
}
}
java继承JSONobject_DTO改造为JsonObject相关推荐
- java继承详解加练习题
继承 继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,以及追加属性和方法 继承的好处 提高了代码的复用性(多个类相同的成员可以收到同一个类中) 提高了代码的维护性 ...
- java继承对象转换_java 继承的基础(转)
java 继承的基础(转)[@more@]继承是面向对象编程技术的一块基石,因为它允许创建分等级层次的类.运用继承,你能够创建一个通用类,它定义了一系列相关项目的一般特性.该类可以被更具体的类继承,每 ...
- Java继承_Hachi君浅聊Java三大特性之 封装 继承 多态
Hello,大家好~我是你们的Hachi君,一个来自某学院的资深java小白.最近利用暑假的时间,修得满腔java语言学习心得.今天小宇宙终于要爆发了,决定在知乎上来一场根本停不下来的Hachi君个人 ...
- Java继承Exception自定义异常类教程以及Javaweb中用Filter拦截并处理异常
Java继承Exception自定义异常类教程以及Javaweb中用Filter拦截并处理异常 参考文章: (1)Java继承Exception自定义异常类教程以及Javaweb中用Filter拦截并 ...
- java 继承类 变量、静态变量、构造函数执行顺序
java 继承类 变量.静态变量.构造函数执行顺序 Java代码 class C{ static int prt(int i){ System.out.println(i); return i; ...
- Java继承时构造函数的关系
Java继承时构造函数的关系,先来一道笔试题给大家看看: 在继承中,关于构造方法的说明,下列说法错误的是() A.子类无条件的继承父类的无参构造方法, B.子类可以引用父类中的有参构造方法,使用sup ...
- java继承关键字super_java学习笔记-继承中super关键字
背景: 在java继承的概念中我们得知,被声明为私有的类成员对所属的类来说仍然是私有的.类之外的任何代码都不能访问,包括子类. super关键字的两种用法: 1.用于调用超类的构造函数: 2.用于访问 ...
- Java:继承之super关键字,继承之私有权限,继承之方法重写,继承之object类,继承之简单工厂模式
一.继承的概念及用法 继承背后的思想就是 基于已存在的类来构建新类 当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求 ...
- Java继承Thread类创建多线程
Java继承Thread类创建多线程 单线程示例 示例,Example01.java public class Example01{public static void main(String[] a ...
最新文章
- Android自定义弹窗模仿微信,Android仿微信右上角点击加号弹出PopupWindow
- enum python_enum:python实现枚举也很优雅
- 02 - Unit06:弹出对话框
- if函数如何嵌入多个android,Android中多个EditText输入效果的解决方式
- [html] 你有使用过output标签吗?说说它的用途有哪些?
- 带你了解AKG正反向算子注册+关联流程
- Java之static的内容
- ssas 维度属性_Analysis Services(SSAS)多维数据集–维度属性和层次结构
- matlab中a k,Python:相当于Matlab的大型数组的svds(A,k)?
- [USACO08NOV]奶牛混合起来Mixed Up Cows
- linux man指令问题
- 如何判断两物体加速度相等_高中物理知识点总结解题技巧:关联物体问题的求解方法...
- 常用激活函数(激励函数)理解与总结
- CDA Level I 模拟题(1)【附答案解析】
- STM32单片机基础知识总结(二)
- webpackjsonp 还原_冰点还原标准版v8.56.020.5542——墨涩网
- 2020大疆数字IC校招笔试题(3)——CMOS 反相器【CMOS逻辑】【MOS管】【PMOS】【NMOS】
- CSS如何修改滚动条的样式?
- neo4j安装详细步骤(小白版)
- BSN-DDC 基础网络关键知识点(三)接入DDC网络