BeanUtil工具类是apache commons中的项目

使用BeanUtil除了需要 commons-beanutils-1.8.3.jar 外,可能需要记录错误日志信息,再加入 commons-logging-1.1.3.jar(也是apache的) 即可

下面着重看一些例子

// 实体类User Point,这里就省去get,set方法

package com.yangwei.model;

import java.util.Date;

public class User {

    private String name;
    private int age;
    private Date birth;
    private Point point;
}
public class Point {

    private int x;
    private int y;
}
package com.yangwei.test;

import static org.junit.Assert.fail;

import java.lang.reflect.InvocationTargetException;

import org.apache.commons.beanutils.BeanUtils;
import org.junit.Test;

import com.yangwei.model.User;

public class TestBeanUtil {

    @Test
    public void test01() {

        try {
            User u=new User();
            //假设要为name设置值"zhangsan"
            String key="name";
            String value="zhangsan";
            //以前我们使用Method 调用它的invoke方法完成操作
            //现在我们使用BeanUtils的copyProperty完成设值操作
            BeanUtils.copyProperty(u, key, value);
            System.out.println(u.getName());//zhangsan

            //拷贝不认识的属性,也不会报错
            BeanUtils.copyProperty(u, "yyy", value);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

    }

}
两个转换器类 ,实现Converter接口

package com.yangwei.model;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.beanutils.Converter;

public class DateConverter implements Converter{

    /**
     * 第一个参数表示要转换的类型, 第二个参数表示要转换的值
     * 比如要拷贝一个字符串到日期中,第一个参数就是日期,第二个参数是字符串值
     */
    SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd");
    @Override
    public Object convert(Class clz, Object obj) {
        if(clz!=Date.class){
            return null;
        }
        try {
            if(obj instanceof String){
                return f.parse((String) obj);
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }

        return null;
    }

}
package com.yangwei.model;

import org.apache.commons.beanutils.Converter;

public class PointConverter implements Converter {

    /**
     * 将传递过来的值转为Point类
     */
    @Override
    public Object convert(Class clz, Object obj) {

        if(clz!=Point.class){
            return null;
        }
        if(obj instanceof String){
            String value=(String)obj;
            String strArr[]=value.split(",");
            if(strArr!=null && strArr.length==2){
                Point point=new Point();
                point.setX(Integer.parseInt(strArr[0]));
                point.setY(Integer.parseInt(strArr[1]));
                return point;
            }
        }
        return null;
    }

}
package com.yangwei.test;

import java.lang.reflect.InvocationTargetException;
import java.util.Date;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.junit.Test;

import com.yangwei.model.DateConverter;
import com.yangwei.model.Point;
import com.yangwei.model.PointConverter;
import com.yangwei.model.User;

public class TestBeanUtil {

    @Test
    public void test01() {

        try {
            User u=new User();
            //假设要为name设置值"zhangsan"
            String key="name";
            String value="zhangsan";
            //以前我们使用Method 调用它的invoke方法完成操作
            //现在我们使用BeanUtils的copyProperty完成设值操作
            BeanUtils.copyProperty(u, key, value);
            System.out.println(u.getName());//zhangsan

            //拷贝不认识的属性,也不会报错
            BeanUtils.copyProperty(u, "yyy", value);
            /**
             * 完整拷贝一个对象,此时会有错误,因为它不知道将Date转为何种类型
             * 日期是有很多中格式情况的,如 1977-10-10 1977/10/10等
             * 此时,如何处理呢???
             * 需要定义转换器  定义转换器的步骤:
             * 1, 创建一个类,实现Converter接口
             * 2,重写convert方法,实现转换
             * 3,在拷贝属性之前,注册转换器
            */
            ConvertUtils.register(new DateConverter(), Date.class);
            BeanUtils.copyProperty(u, "birth", "1988-11-20");
            ConvertUtils.register(new PointConverter(), Point.class);
            BeanUtils.copyProperty(u, "point", "12,23");

            User u2=new User();
            BeanUtils.copyProperties(u2, u);

            System.out.println(u.getName()+u.getBirth()+u.getPoint());
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

    }

}

apache-beanutil工具类的使用的更多相关文章

  1. Apache Commons 工具类介绍及简单使用

    转自:http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下 ...

  2. linkin大话数据结构--apache commons工具类

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动. 一.Commons BeanUtils 说明:针对Bean的一个工具集.由于Bean往往是有一堆ge ...

  3. Apache Commons 工具类简单使用

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于 ...

  4. BeanUtil工具类的使用

    BeanUtils的使用 1.commons-beanutils的介绍 commons-beanutils是Apache组织下的一个基础的开源库,它提供了对Java反射和内省的API的包装,依赖内省, ...

  5. Apache Commons 工具类介绍及简单使用(转载)

    原文链接 http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动 ...

  6. Java:Apache Commons 工具类介绍及简单使用

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. Commons简介 组件 功能介绍 commo ...

  7. JavaWeb基础Day17 (JSP EL表达式 jstl标签库 beanutil工具类)

    JSP jsp的实质就是指在html界面中嵌入Java代码 jsp脚本 <%  Java代码  %>  相当于写在service方法中. <%=java 变量或者表达式 %> ...

  8. apache StringUtils 工具类

    // org.apache.commons.lang3.StringUtils // 1.IsEmpty/IsBlank - checks if a String contains text 检查是否 ...

  9. apache ArrayUtils 工具类

    org.apache.commons.lang3.ArrayUtils // 1.add():将给定的数据添加到指定的数组中,返回一个新的数组. int[] arr = { 1, 2, 3 }; in ...

  10. 03-封装BeanUtil工具类(javabean转map和map转javabean对象)

    package com.oa.test; import java.beans.BeanInfo; import java.beans.IntrospectionException; import ja ...

随机推荐

  1. ASP.NET MVC最新特性

    问题: 既然我说对ASP.NET MVC很熟很懂,对新技术很感兴趣,那么问题是: 当前最新版MVC是什么?你用的哪个版本?相比前一个版本有什么新的特性? 解析: 在面试的时候,为了争取面试官的好感,显 ...

  2. easyui datagrid自定义按钮列,即最后面的操作列(转)

    做项目的时候因为需求,要在表格的最后添加一列操作列,easyUI貌似没有提供这种功能,不过没关系,我们可以自定义来实现 版本:jQuery easyUI 1.3.2 这里我的实现方式是采用HTML形式 ...

  3. postman进行http接口测试

    HTTP的接口测试工具有很多,可以进行http请求的方式也有很多,但是可以直接拿来就用,而且功能还支持的不错的,我使用过的来讲,还是postman比较上手. 优点: 1.支持用例管理 2.支持get. ...

  4. VMware Workstation 12 Pro 之安装林耐斯-Elementaryos-系统

    VMware Workstation 12 Pro 之安装林耐斯-Elementaryos-系统... ---------------- ------------------------------- ...

  5. Spring集成RabbitMQ-必须知道的几个概念

    上篇<Spring集成RabbiMQ-Spring AMQP新特性>我们了解了最新spring-rabbit的2.0.0.M5版本相较于之前有哪些变化.其实使用Spring-amqp确实简 ...

  6. 【渗透笔记】拿下某小H网的全过程

    自从班上A片小王子的7个T资源被封了以后,本小白为造福全班同学,尝试拿下个小H网,先用webrobot搜某些只有小H网才会出现的关键词 本以为直接导出放御剑里跑就行了,然并软.于是用awvs扫了一下, ...

  7. HTML5新结构标签和移动端页面布局

    --------------------HTML5新结构标签--------------------1.h5新增的主要语义化标签如下: 1.header 页面头部.页眉 2.nav 页面导航 3.ar ...

  8. 优先队列的二叉堆Java实现

    package practice; import edu.princeton.cs.algs4.StdRandom; public class TestMain { public static voi ...

  9. spring mvc:@RequestParam与@ModelAttribute异同

    关于spring mvc中的两个注解:@RequestParam.@ModelAttribute区别,原先并没有特别注意,直到最近找别人开发的一个小模块的bug时,才有意识的比较了两者的区别. 1.@ ...

  10. chrome开发工具指南(十三)

    模拟传感器:地理定位与加速度计 由于大多数桌面设备都没有 GPS 芯片和加速度计,所以测试它们比较困难.Chrome DevTools 的 Sensors 模拟窗格可以通过模拟常见的移动设备传感器来降 ...