工作中遇到一个需求,根据对方返回Json来更新Java对象。查阅资料,写了个工具类,同时学到了反射获取集合泛型类型。代码里json类库为fastjson

 public class JsonUtil {

     /**
      * JavaBean的属性比Json多时,根据Json更新JavaBean同名字段的值
      *
      * @param bean
      * @param json
      * @param <T>
      */
     public static <T> void patchUpdate(T bean, JSONObject json) throws Exception {
         Set<String> keys = json.keySet();
         Field[] fields = bean.getClass().getDeclaredFields();
         for (String key : keys) {
             for (Field field : fields) {
                 if (field.getName().equals(key)) {
                     String value = json.getString(key);
                     String type = field.getType().toString();
                     field.setAccessible(true);
                     if (type.endsWith("String")) {
                         field.set(bean, value);
                     } else if (type.endsWith("int")) {
                         field.set(bean, Integer.parseInt(value));
                     } else if (type.endsWith("double")) {
                         field.set(bean, Double.parseDouble(value));
                     } else if (type.endsWith("Date")) {
                         DateFormat fmtDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                         Date date = fmtDateTime.parse(value);
                         field.set(bean, date);
                     } else if (type.endsWith("List")) {
                         //先获取List的类型:java.util.List<E>
                         ParameterizedType pt = (ParameterizedType)field.getGenericType();
                         //获取泛型:E
                         Class e = (Class)pt.getActualTypeArguments()[0];
                         List list = JSONArray.parseArray(value, e);
                         field.set(bean, list);
                     }
                 }
             }
         }
     }
 }

通过反射实现Json数据部分更新JavaBean的属性的更多相关文章

  1. 控制层解析post请求中json数据的时候,有些属性值为空

    原因: 1.默认json数据解析的时候,值会赋给键的首字母是小写的封装的bean中的属性,如果没有首字母小写的属性,也不会报错.即bean中有getXXX方法时,从json到model会增加xxx属性 ...

  2. json数据前台解析 修改check属性用prop()

    jQuery中的$.getJSON( )方法函数主要用来从服务器加载json编码的数据,它使用的是GET HTTP请求.使用方法如下: $.getJSON( url [, data ] [, succ ...

  3. 反射--> 解析JSON数据

    方法一 Persons.json文件 [ { "name": "Chris", "age": 18, "city": & ...

  4. SpringMVC返回JSON数据时日期格式化问题

    https://dannywei.iteye.com/blog/2022929 SpringMVC返回JSON数据时日期格式化问题 博客分类: Spring   在运用SpringMVC框架开发时,可 ...

  5. 使用TSQL查询和更新 JSON 数据

    JSON是一个非常流行的,用于数据交换的文本数据(textual data)格式,主要用于Web和移动应用程序中.JSON 使用“键/值对”(Key:Value pair)存储数据,能够表示嵌套键值对 ...

  6. Google中Gson的使用解析json数据-------学习篇

    之前写过一篇Gson解析json数据的基本应用,这里不多说,直接上例子. 有兴趣的可以先阅读下之前那篇,这里附上链接: http://www.cnblogs.com/Ant-soldier/p/632 ...

  7. 使用Gson轻松解决复杂结构的Json数据解析

    转载请注明来源: http://blog.csdn.net/kjunchen/article/details/50961803 JSON简介 JSON(JavaScript Object Notati ...

  8. Ajax —— 服务器端发送JSON数据

    重点需要解决的问题:服务器端如何构建JSON数据 思考:JavaBean转JSON数据,集合转JSON数据,普通java对象(String,Number)转JSON数据 一.Gson开源jar包   ...

  9. 判断json数据是否为空

    json数据是没有length这个属性的 ,所以不能直接用.length()方法 我们可以先遍历,然后根据遍历次数求长度 1.在IE上这样遍历json:(js代码) var jsonLength = ...

随机推荐

  1. [leetcode-516-Longest Palindromic Subsequence]

    Given a string s, find the longest palindromic subsequence's length in s. You may assume that the ma ...

  2. ajax数据请求5(php格式)

    ajax数据请求5(php格式): <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...

  3. Spring+SpringMVC+MyBatis深入学习及搭建(十六)——SpringMVC注解开发(高级篇)

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7085268.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十五)——S ...

  4. 第一个SpringMVC实例和解析(HelloSpringMVC)

    1. 开发步骤: (1)增加Spring支持 下载Spring安装包和其依赖的commons-logging.jar,复制到项目Web应用的lib文件夹(WebRoot/WEB-INF/lib): S ...

  5. mac下,mysql5.7.18连接出错,错误信息为:Access denied for user 'root'@'localhost' (using password: YES)

    mac下,mysql5.7.18连接出错,错误信息为:Access denied for user 'root'@'localhost' (using password: YES)()里面的为shel ...

  6. Oracle 11g OCM 考试大纲

    考试大纲共分9部分.   一.Server Configuration 服务器配置 1  Create the database 创建数据库 2  Determine and set sizing p ...

  7. 20170714_js闭包变量重置

    <html> <body> <script> function createFunctions(){ var result = new Array(); for ( ...

  8. Python面向对象编程(一)

    1.什么是面向对象 面向对象(oop)是一种抽象的方法来理解这个世界,世间万物都可以抽象成一个对象,一切事物都是由对象构成的.应用在编程中,是一种开发程序的方法,它将对象作为程序的基本单元. 2.面向 ...

  9. 如何通过android代码获取LTE信息?

    最近为了成功得到LTE的信号强度,尝试了很多种方法: (1)通过解析signalstrength字符串,但是不同手机设备获得的字符串排列顺序不同,代码如下: private PhoneStateLis ...

  10. maven引入已经拥有的jar包

    <!-- https://mvnrepository.com/artifact/jfree/jcommon --><dependency>    <groupId> ...