利用JAVA反射机制将JSON数据转换成JAVA对象
2024-08-25 23:54:35
net.sf.json.JSONObject为我们提供了toBean方法用来转换为JAVA对象, 功能更为强大, 这里借鉴采用JDK的反射机制, 作为简单的辅助工具使用, 有些数据类型需要进行转换, 根据需要进行扩展, 这里可以处理Long和Date类型.
只支持单个JSONObject对象的处理, 对于复杂的JSON对象, 如JSONArray数组, 可考虑先遍历, 获取JSONObject后再进行处理.
package common; import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import net.sf.json.JSONObject; /**
* 辅助处理工具
*
*/
public class AssistantUtil
{ private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); /**
* 把JSON数据转换成JAVA对象
* description: 函数的目的/功能
*/
public static void setJsonObjData(Object obj, JSONObject data, String[] excludes) throws Exception
{ // 反射获取所有方法
Method[] methods = obj.getClass().getDeclaredMethods();
if (null != methods)
{ for (Method m : methods)
{ String methodName = m.getName(); if (methodName.startsWith("set"))
{ methodName = methodName.substring(3);
// 获取属性名称
methodName = methodName.substring(0, 1).toLowerCase() + methodName.substring(1); if (!methodName.equalsIgnoreCase("class") && !isExistProp(excludes, methodName))
{ try
{ m.invoke(obj, new Object[] { data.get(methodName) });
}
catch (IllegalArgumentException e1)
{
if(m.getParameterTypes()[0].getName().equals("java.lang.Long")){
m.invoke(obj, new Object[] { Long.valueOf(data.get(methodName).toString())});
}else if(m.getParameterTypes()[0].getName().equals("java.util.Date")){
m.invoke(obj, new Object[] {data.containsKey(methodName)? sdf.parse(data.get(methodName).toString()) : null}); }
}
catch (Exception e)
{ } }
}
}
} } private static boolean isExistProp(String[] excludes, String prop)
{ if (null != excludes)
{ for (String exclude : excludes)
{
if (prop.equals(exclude))
{
return true;
}
}
}
return false;
} }
最新文章
- django的跨站请求访问
- 常用命令之ps
- mybatis返回HashMap结果类型与映射
- HDU4651+数学公式
- 【综述】(MIT博士)林达华老师-";概率模型与计算机视觉”
- 如何打开mo文件并修改 PoEdit
- 【转】ASCII码表在线查询
- Linux的VI/VIM
- fopen 參数具体解释
- 5月,专用程序猿的经典大作——APUE
- Presto0.157版本单节点部署教程
- 【IT人】如何提高阅读源代码的效率
- Python开发【内置模块篇】datetime
- 弹窗查看内容时 内容滚动区域设置为body区
- linux操作系统中的netstat命令查看端口状态的使用和window操作系统查看端口号
- [ 高危 ] mt SQL注入
- Coroutines declared with async/await syntax is the preferred way of writing asyncio applications. For example, the following snippet of code (requires Python 3.7+) prints “hello”, waits 1 second, and
- 基于jQuery图片遮罩滑动文字切换特效
- BurpStuite使用技巧
- Spring源码解析(四)Bean的实例化和依赖注入
热门文章
- .NET: 配置文件
- struts配置请求后缀,将.action改为.do、.doaction_2015.01.04
- paper 39 :Matlab绘制误差棒图(errorbar函数的使用)
- 夺命雷公狗ThinkPHP项目之----企业网站5之栏目的添加(主要是图片上传)
- 【rails3教材】博客构建过程2
- SQLServer出现 '其他会话正在使用事务的上下文' 的问题原因,什么是环回链接服务器?(转载)
- SDK Manager failed to install 'java.exe' locking directory
- android 项目学习随笔十三(ListView实现ITEM点击事件,将已读状态持久化到本地)
- Delphi 中将一些 Dll等生成资源文件打包成一个独立的EXE程序方法步骤
- iOS 学习笔记 二 (2015.02.26)