曾经有个项目,遇到一个情况就是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相关推荐

  1. java继承详解加练习题

    继承 继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,以及追加属性和方法 继承的好处 提高了代码的复用性(多个类相同的成员可以收到同一个类中) 提高了代码的维护性 ...

  2. java继承对象转换_java 继承的基础(转)

    java 继承的基础(转)[@more@]继承是面向对象编程技术的一块基石,因为它允许创建分等级层次的类.运用继承,你能够创建一个通用类,它定义了一系列相关项目的一般特性.该类可以被更具体的类继承,每 ...

  3. Java继承_Hachi君浅聊Java三大特性之 封装 继承 多态

    Hello,大家好~我是你们的Hachi君,一个来自某学院的资深java小白.最近利用暑假的时间,修得满腔java语言学习心得.今天小宇宙终于要爆发了,决定在知乎上来一场根本停不下来的Hachi君个人 ...

  4. Java继承Exception自定义异常类教程以及Javaweb中用Filter拦截并处理异常

    Java继承Exception自定义异常类教程以及Javaweb中用Filter拦截并处理异常 参考文章: (1)Java继承Exception自定义异常类教程以及Javaweb中用Filter拦截并 ...

  5. java 继承类 变量、静态变量、构造函数执行顺序

    java 继承类 变量.静态变量.构造函数执行顺序 Java代码   class C{ static int prt(int i){ System.out.println(i); return i; ...

  6. Java继承时构造函数的关系

    Java继承时构造函数的关系,先来一道笔试题给大家看看: 在继承中,关于构造方法的说明,下列说法错误的是() A.子类无条件的继承父类的无参构造方法, B.子类可以引用父类中的有参构造方法,使用sup ...

  7. java继承关键字super_java学习笔记-继承中super关键字

    背景: 在java继承的概念中我们得知,被声明为私有的类成员对所属的类来说仍然是私有的.类之外的任何代码都不能访问,包括子类. super关键字的两种用法: 1.用于调用超类的构造函数: 2.用于访问 ...

  8. Java:继承之super关键字,继承之私有权限,继承之方法重写,继承之object类,继承之简单工厂模式

    一.继承的概念及用法       继承背后的思想就是        基于已存在的类来构建新类         当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求 ...

  9. Java继承Thread类创建多线程

    Java继承Thread类创建多线程 单线程示例 示例,Example01.java public class Example01{public static void main(String[] a ...

最新文章

  1. Android自定义弹窗模仿微信,Android仿微信右上角点击加号弹出PopupWindow
  2. enum python_enum:python实现枚举也很优雅
  3. 02 - Unit06:弹出对话框
  4. if函数如何嵌入多个android,Android中多个EditText输入效果的解决方式
  5. [html] 你有使用过output标签吗?说说它的用途有哪些?
  6. 带你了解AKG正反向算子注册+关联流程
  7. Java之static的内容
  8. ssas 维度属性_Analysis Services(SSAS)多维数据集–维度属性和层次结构
  9. matlab中a k,Python:相当于Matlab的大型数组的svds(A,k)?
  10. [USACO08NOV]奶牛混合起来Mixed Up Cows
  11. linux man指令问题
  12. 如何判断两物体加速度相等_高中物理知识点总结解题技巧:关联物体问题的求解方法...
  13. 常用激活函数(激励函数)理解与总结
  14. CDA Level I 模拟题(1)【附答案解析】
  15. STM32单片机基础知识总结(二)
  16. webpackjsonp 还原_冰点还原标准版v8.56.020.5542——墨涩网
  17. 2020大疆数字IC校招笔试题(3)——CMOS 反相器【CMOS逻辑】【MOS管】【PMOS】【NMOS】
  18. CSS如何修改滚动条的样式?
  19. neo4j安装详细步骤(小白版)
  20. BSN-DDC 基础网络关键知识点(三)接入DDC网络

热门文章

  1. PostgreSQL与es的数据同步方案调研
  2. Destoon免登陆文章通用发布插件
  3. 男生学汽修还是计算机,哪些专业适合男生学习
  4. java cpu监控_如何在Java中监视计算机的CPU,内存和磁盘使用情况?
  5. Servlet生命周期思维导图
  6. 【考古-3】——Dynamic time warping(DTW)算法
  7. QT实现TCP网络通信
  8. 谈谈对网络通信的理解
  9. The Thirty-ninth Of Word-Day
  10. 01编写10个线程,第一个线程从1加到10,第二个线程从11加20…第十个线程从91加到100,最后再把10个线程结果相加。