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;
} }

最新文章

  1. django的跨站请求访问
  2. 常用命令之ps
  3. mybatis返回HashMap结果类型与映射
  4. HDU4651+数学公式
  5. 【综述】(MIT博士)林达华老师-"概率模型与计算机视觉”
  6. 如何打开mo文件并修改 PoEdit
  7. 【转】ASCII码表在线查询
  8. Linux的VI/VIM
  9. fopen 參数具体解释
  10. 5月,专用程序猿的经典大作——APUE
  11. Presto0.157版本单节点部署教程
  12. 【IT人】如何提高阅读源代码的效率
  13. Python开发【内置模块篇】datetime
  14. 弹窗查看内容时 内容滚动区域设置为body区
  15. linux操作系统中的netstat命令查看端口状态的使用和window操作系统查看端口号
  16. [ 高危 ] mt SQL注入
  17. 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
  18. 基于jQuery图片遮罩滑动文字切换特效
  19. BurpStuite使用技巧
  20. Spring源码解析(四)Bean的实例化和依赖注入

热门文章

  1. .NET: 配置文件
  2. struts配置请求后缀,将.action改为.do、.doaction_2015.01.04
  3. paper 39 :Matlab绘制误差棒图(errorbar函数的使用)
  4. 夺命雷公狗ThinkPHP项目之----企业网站5之栏目的添加(主要是图片上传)
  5. 【rails3教材】博客构建过程2
  6. SQLServer出现 '其他会话正在使用事务的上下文' 的问题原因,什么是环回链接服务器?(转载)
  7. SDK Manager failed to install 'java.exe' locking directory
  8. android 项目学习随笔十三(ListView实现ITEM点击事件,将已读状态持久化到本地)
  9. Delphi 中将一些 Dll等生成资源文件打包成一个独立的EXE程序方法步骤
  10. iOS 学习笔记 二 (2015.02.26)