Json工具类,实现了反射将整个Object转换为Json对象的功能,支持Hibernate的延迟加
|
import java.lang.reflect.Array; import org.json.JSONArray; /** *//** private static JSONUtil instance = null; static public String toJSONString(Object obj) throws JSONException...{ private String getJSONArray(Object arrayObj, boolean useClassConvert) throws JSONException...{ JSONStringObject getJSONObject(Object value, boolean useClassConvert) throws JSONException...{ //处理原始类型 if (value == null) ...{ Iterator iterator = ((Map)value).keySet().iterator(); //class if(value instanceof Class) if (value instanceof Collection || value.getClass().isArray()) ...{ return reflectObject(value, useClassConvert); private JSONStringObject reflectObject(Object bean, boolean useClassConvert)...{ Class klass = bean.getClass(); jSONObject.put(key, getJSONObject(elementObj, useClassConvert)); package com.aherp.framework.util; import org.json.JSONString; public class JSONStringObject implements JSONString ...{ private String jsonString = null; @Override public String toJSONString() ...{ 调用测试程序 import java.util.ArrayList; public class AObj ...{ public AObj()...{ import java.math.BigDecimal; public class BObj ...{ private HashMap innerhm = new HashMap(); public HashMap getInnerhm() ...{ public void setInnerhm(HashMap innerhm) ...{ public class CObj extends AObj...{ private Object[] oarray = new Object[]...{352, false, "kick"}; public Object[] getOarray() ...{ public void setOarray(Object[] oarray) ...{ import java.util.*; import org.json.JSONException; import com.aherp.framework.util.HiJSONUtil; public class Test ...{ 输出: 如果需要支持Hibernate,那么必须弄清其机制。Hibernate采用CGLIB对VO对象进行字节码增加,实际机制就是使用一个原类型的proxy子类,其子类实现了HibernateProxy接口。其接口有一个isUninitialized的判断方法,用来判断该代理类是否已经初始化(还记得在事务外使用延迟加载的对象会抛no Session的错误吗,正是由于实际使用的对象已经变成原来类的子类proxy了)。而对于one-to-many映射时,很难判断对象只加载一次,因此为了避免递归调用死循环,忽略了Hibernate的one-to-many集合的递归反射。其原理和many-to-one一样,也是一个子类化的proxy,具有PersistentSet的接口。 因此,支持Hibernate的JSONUtil如下: package com.aherp.framework.util; import org.hibernate.collection.PersistentSet; /**//** private static HiJSONUtil instance = null; static public String toJSONString(Object obj) throws JSONException...{ @Override } |
Json工具类,实现了反射将整个Object转换为Json对象的功能,支持Hibernate的延迟加的更多相关文章
- JSON工具类的构建(后端版本)
前言 在前后端交互的选择上,之前一直采用的是模板引擎(因为我只负责后端). 而这次的一个算是作业吧,前后端都是我,所以就研究了一下JSON交互在java web的应用(主要是前端). 优缺点 前后端耦 ...
- 用jackson封装的JSON工具类
package hjp.smart4j.framework.util; import com.fasterxml.jackson.databind.ObjectMapper; import org.s ...
- Code片段 : .properties属性文件操作工具类 & JSON工具类
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “贵专” — 泥瓦匠 一.java.util.Properties API & 案例 j ...
- Json工具类 - JsonUtils.java
Json工具类,提供Json与对象之间的转换. 源码如下:(点击下载 - JsonUtils.java . gson-2.2.4.jar ) import java.lang.reflect.Type ...
- Java json工具类,jackson工具类,ObjectMapper工具类
Java json工具类,jackson工具类,ObjectMapper工具类 >>>>>>>>>>>>>>> ...
- Spring统一返回Json工具类,带分页信息
前言: 项目做前后端分离时,我们会经常提供Json数据给前端,如果有一个统一的Json格式返回工具类,那么将大大提高开发效率和减低沟通成本. 此Json响应工具类,支持带分页信息,支持泛型,支持Htt ...
- 强大的Java Json工具类
转自: https://blog.csdn.net/u014676619/article/details/49624165 import java.io.BufferedReader; import ...
- HttpClientUntils工具类的使用测试及注意事项(包括我改进的工具类和Controller端的注意事项【附 Json 工具类】)
HttpClient工具类(我改过): package com.taotao.httpclient; import java.io.IOException; import java.net.URI; ...
- json工具类(三)——net包
package com.ruoyi.common.utils.json; import java.util.List; import java.util.Map; import net.sf.json ...
随机推荐
- 完善DriveInfoEx源代码 获取计算机硬盘序列号
概述: 获取计算机硬盘序列号用途很多,在网上找到了一个C++的源代码DriveInfoEx(点这里查看).非常好的一个DLL,.NET项目可以直接引用,而且源代码里有示例. 但这个DLL在Win7非管 ...
- July 21st, Week 30th Thursday, 2016
What youth deemed crystal, age finds out was dew. 年少时的水晶,在岁月看来不过是露珠. As time goes by, we are gradual ...
- linux下文件压缩与解压操作
对于刚刚接触Linux的人来说,一定会给Linux下一大堆各式各样的文件名给搞晕.别个不说,单单就压缩文件为例,我们知道在Windows下最常见的压缩文件就只有两种,一是,zip,另一个是.rap.可 ...
- Java中栈结构的自我实现
package com.pinjia.shop.common.collection; /** * Created by wangwei on 2017/1/3. */ public class MyL ...
- 面向服务的体系结构(SOA)——(5)关于MEP(Message Exchange Patterns)
SOA中的MEP和JavaEE中的JMS类似,当然了就应该是类似的,因为都是关于消息方面的.一个是对系统架构当中消息的解决思路,一个是针对Java平台中的消息的具体解决办法(严格说不是具体的,只是提供 ...
- MATLAB学习笔记(八)——MATLAB数值积分与微分
(一)数值积分 一.数值积分的MATLAB实现方法: 1.变步长辛普生法(quad)法: (1)调用格式: [I,n]=quad('fname',a,b,tol,trace); fname是被积函数: ...
- Ubuntu安装sciki-learn及环境
http://scikit-learn.org/stable/install.html 安装python-dev 安装这个包,以后安装各种python扩展包,可以省很多事情. sudo apt-get ...
- Fragment基础讲解
//新建一个碎片public class LeftFragment extends Fragment { @Override public View onCreateView(LayoutInflat ...
- Loadrunner请求自定义的http(json)文件and参数化
Loadrunner请求自定义的http(json)文件and参数化 研究啦好些天这个东西啦 终于出来答案啦 嘿嘿 给大家分享一下 : 请求自定义的http文件用函数:web_custom_ ...
- cf 621D
http://acm.zzkun.com/archives/717 这个大神的解答非常,额 猥琐.但是实在是太强了.感觉所有的大数都可以用 long double 了.