ajax打印对象时,转换由java对象转为Json格式的String时遇到的Hibernate问题
来源:互联网 发布:diy spi编程器 编辑:程序博客网 时间:2024/05/01 21:46
相信很多朋友的项目中会用到Ajax,并且也会有Hibernate框架,当2者同时存在,并且需要把Java对象乃至Java集合对象封装成Json形式的String时会出现一些异常.
现在网上有很多的Json工具类,但是很少有能解析Hibernate配置了级联系关系以后的那种,即使有也是改了底层代码,调试起来非常的复杂.试想如果关系是客户和订单一对多,订单和商品种类一对多,商品种类和商品一对多,商品和..&&(*&()我已经说不下去了,如果是这样一个关系,单单用他们的工具格式会是怎么样的?
{"customer":"god",{"order":"CN-2008-8-8CN",{"shopType":"vagetable",{"shop":"beef"}}}}.....以此类推,如果属性一多,别说前台调用,根本看都看不清楚.有的人说设置Hibernate的延迟加载可以避免这个尴尬,但是貌似Hibernate默认就是延迟加载,我用的一个JsonUtil工具解析的时候经常出错.于是只好自己动手写一个方法,这个方法把所有的非当前对象里的基本属性全部过滤掉,例如:School, Order, Customer等. 只需要纯的某个对象的所有key和value.这种格式封装的JsonString就很好打印了. 下面是这段代码..
public Map getObjectForMap(Object obj) {
//存放obj对象基本属性,不包括级联对象
Map<Object, Object> map = new HashMap<Object, Object>();
//obj对象的Class
Class userClass = null;
//obj对象的所有方法
Method[] userMethod = null;
//obj对象的所有字段
Field[] userField = null;
//obj对象单个属性的名字
String fieldName = null;
//obj对象单个属性的类型
String fieldType = null;
//截取后的obj对象单个属性名字,用来匹配属性对应的set/get方法. 如username,截后成为sername 匹配setUsername或getUsername方法
String newFieldName = null;
//obj对象单个方法的名字
String methodName = null;
//obj对象单个方法的类型
String methodType = null;
//SimpleDateFormat对象用来格式化时间..把时间变成字符串形式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm");
//arg参数代表存放时间被格式化后的字符串
String arg = null;
try{
userClass = obj.getClass();
userMethod = userClass.getDeclaredMethods();
userField = userClass.getDeclaredFields();
//遍历所有属性...
for(int num = 0; num < userField.length; num++) {
//单个属性名字
fieldName = userField[num].getName();
//单个属性的类型
fieldType = userField[num].getType().getName();
//如果属性名属于obj对象的基本属性(也就是非级联属性,例如:School school 为级联属性)..
//此出过滤所有的非当前对象基本类型..如果有需要可以再此处增加新的类型,例入:StampTime等..
if(fieldType.equals("java.lang.String")
|| fieldType.equals("java.lang.Integer")
|| fieldType.equals("int")
|| fieldType.equals("java.util.Date")) {
//截取后的属性名,username 截取为sername;
newFieldName = fieldName.substring(1, fieldName.length());
//遍历所有方法
for(int index = 0; index < userMethod.length; index++) {
//单个方法名
methodName = userMethod[index].getName();
//单个方法的返回类型
methodType = userMethod[index].getReturnType().getName();
//选取所有方法前缀为get并且方法名与属性名匹配的方法..
if(methodName.indexOf(newFieldName) != -1 && methodName.indexOf("get") != -1) {
//格式化Date为String
if(methodType.equals("java.util.Date")) {
arg = sdf.format(userMethod[index].invoke(obj));
map.put(fieldName, arg);
} else {
map.put(fieldName, userMethod[index].invoke(obj));
}
}
}
}
}
} catch (Exception e) {
System.out.println(e.toString() + " 运行出错..");
}
return map;
}
返回map以后,再用网上常见的Json工具包里的转Map为JsonString格式的方法一处理就可以很好的丢到前台打印啦....
- ajax打印对象时,转换由java对象转为Json格式的String时遇到的Hibernate问题
- JSON格式转为JSON对象的方式
- Jackson json转为java对象时遇到不规范的命名规则处理
- java对象、List转为json格式的数据
- java对象、List转为json格式的数据
- 由json字串生成json对象时的转义问题
- 由json字串生成json对象时的转义问题
- JSON转为Java对象时报的错
- JSON String类型转换时遇到的问题--ClassCastException
- Json格式与java对象之间的转换
- java将实体对象转换成JSON格式的字符串
- JS将string字符串转为json对象的办法
- java中使用XStream实现将对象转为xml格式字符串或者将xml格式的字符串转换为对象
- 使用Jackson转换java对象为Json数据时,Json循环的问题
- fastjson将对象格式化成json时的两个问题
- ajax 发送请求参数传递问题 如果传递的值是一个json格式的要转为string
- json 转为java对象
- Java对象转为json
- Timer--ActionListener接口
- 面试:问题一:“请你自我介绍一下”
- Linux设备驱动编程之阻塞与非阻塞 1
- 摄像头拍dV软件
- 找资料
- ajax打印对象时,转换由java对象转为Json格式的String时遇到的Hibernate问题
- bat批处理教程
- Linux设备驱动编程之阻塞与非阻塞 2
- C#监视注册表的类 使用WIN32 API
- Single Sign On,单点登录
- 网址导航
- MyEclipse代码编辑辅助功能
- 系统栈的相关问题(1)--栈的基本了解
- 通过脚本构造树.