相信很多朋友的项目中会用到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格式的方法一处理就可以很好的丢到前台打印啦....
分享到:
相关推荐
Flexjson是一个轻量级的Java库,用于将Java对象转换为JSON格式的字符串,反之亦然。这个压缩包“Flexjson.zip”包含了Flexjson库的版本2.1,这是一个广泛使用的工具,尤其在处理JSON数据时,对于开发人员来说非常...
"json-lib-2.4-ALL.rar"是一个包含JSON库的压缩文件,JSON Lib是一个Java库,用于在Java对象和JSON数据之间进行转换,它是Struts2实现JSON支持的一个依赖库。 在Struts2中使用JSON,首先需要在配置文件(struts.xml...
在处理数据展示时,我们可能需要将后端Java对象转换为JSON格式,以便于前端EasyUI进行渲染和操作。本文将详细探讨如何在SSH框架中将含有级联对象或集合的List转化为JSON。 首先,了解JSON(JavaScript Object ...
2. Gson:Google提供的库,通过简单的API将Java对象转换为JSON字符串,并可以从JSON字符串中反序列化回Java对象。Gson特别适合简单的数据模型,其API直观且易于使用。 3. org.json:这是一个轻量级的库,提供了`org...
这些库提供了将Java对象转换为JSON字符串的功能。在描述中提到的`strutsjson`压缩包可能包含了必要的库文件。 2. **配置Struts2**:在`struts.xml`配置文件中,你需要为处理JSON请求的Action定义一个特定的拦截器栈...
例如,Gson库通过`Gson().toJson()`方法将Java对象转换为JSON,而`Gson().fromJson()`则可以将JSON字符串还原为Java对象。 资源包中提到的"和其他框架整合的jar"可能包含了这些JSON处理库,使得开发者可以直接在...
Hibernate 是一个强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用程序中管理关系数据库的强大工具。通过使用Hibernate,开发者可以将数据库操作与业务逻辑解耦,使代码更加简洁、高效。本指南将深入...
**Ajax+Hibernate+Struts 实现无刷新分页详解** 在Web开发中,提供分页功能是必不可少的,尤其在处理大数据量时,无刷新分页可以极大地提升用户体验。本篇将详细介绍如何利用Ajax、Hibernate和Struts框架,构建一个...
序列化是将Java对象转换为JSON字符串,反序列化则是将JSON字符串转换回Java对象。以Jackson为例,使用`ObjectMapper`类可以轻松完成这个过程: ```java import com.fasterxml.jackson.databind.ObjectMapper; // ...
当我们在Struts2框架中整合SSH(Spring、Struts2、Hibernate)时,可能会遇到与JSON相关的数据处理问题。下面我们将深入探讨Struts2整合JSON的相关知识点。 首先,Struts2提供了一种内置的JSON支持,允许我们直接将...
在IT行业中,Java和Ajax是两种非常重要的技术,它们在构建动态、交互性强的Web应用程序时发挥着关键作用。本文将深入探讨如何利用Java后端技术和Ajax前端技术实现数据库的实时联动效果。 首先,让我们理解Java和...
- Hibernate作为ORM工具,负责将Java对象映射到数据库表。通过Session Factory创建Hibernate Session,执行HQL(Hibernate Query Language)或SQL查询来检查用户名是否存在。 总的来说,这个过程结合了前端的动态...
在Web开发中,Java与Ajax(Asynchronous JavaScript and XML)的结合可以实现异步数据交互,提高用户体验。本文将深入探讨如何使用Java后端和Ajax前端技术来验证用户名的唯一性,以确保用户注册时输入的用户名未被...
当客户端发送请求到`ajaxRequest.action`时,会触发`HelloWorld`类中的方法,并返回JSON格式的数据。 **2. 使用jQuery发送Ajax请求** 在前端页面中,我们可以通过jQuery轻松地发送Ajax请求。例如,在`helloworld....
总结来说,实现“Java调用Ajax实时监测用户名是否存在”的功能,需要结合前端的Ajax技术与后端的Java接口,通过异步通信方式在用户输入时检查数据库,提供即时反馈。这个过程中涉及到HTML表单、JavaScript、jQuery、...
3. **返回JSON对象**:在处理方法中,创建一个Java对象,该对象的属性对应于要返回的JSON键值对。例如,你可以创建一个`ResponseBean`类,包含你需要的属性,如`status`和`message`。 ```java public class ...
在Java端,我们将使用Java后端框架(如Spring MVC或Struts2)来处理数据,然后将数据转换成JSON格式,因为Highcharts能够直接解析JSON数据来生成图表。以下是一个基本流程: 1. **连接数据库**:使用Java的JDBC API...
var jsonString = JSON.stringify(student); ``` - **反序列化 (Deserialization)**:将 JSON 字符串转换为 JavaScript 对象。 ```javascript var obj = JSON.parse(jsonString); ``` #### 3. Java 与 JSON ...
Java面试大全涵盖了大部分Java程序员在面试中可能会遇到的问题,这些题目分布在十个主要部分,全面考察了应聘者的Java核心知识、面向对象设计与UML、XML处理、SQL操作、JDBC与Hibernate框架、Web开发技术、EJB与...
DWR支持将Java对象转换为JSON格式,然后在JavaScript中解析。假设你有一个Java类`Person`,包含姓名和年龄属性,你可以创建一个`Person`对象并返回。DWR会将其转换为JSON字符串,JavaScript端可以接收到一个...