BeanUtils制作自定义的转换器

一般来说,BeanUtils自带的Converter基本上可以满足我们在开发过程中的使用了,然而很多时候我们还是需要自定义一些转换器。


MyBean.java

package beanutils;

import java.util.Date;

public class MyBean {

    private String name;
    private int age;
    private Date birthday;
    private boolean isAlive;

    private MyClass myclass;

    public MyClass getMyclass() {
        return myclass;
    }

    public void setMyclass(MyClass myclass) {
        this.myclass = myclass;
    }

    public MyBean() {

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public boolean isAlive() {
        return isAlive;
    }

    public void setAlive(boolean isAlive) {
        this.isAlive = isAlive;
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59

MyClass.java

大家可以看到,这个Bean里面多了一个MyClass的组合类。内容很简单,如下:

package beanutils;

public class MyClass {

    private String classname;

    public String getClassname() {
        return classname;
    }

    public void setClassname(String classname) {
        this.classname = classname;
    }


}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

TestMyBean.java

测试代码如下:

package beanutils;

import java.util.Date;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
import org.apache.commons.beanutils.converters.BooleanConverter;
import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;
import org.junit.Test;

public class TestMyBean {

    /**
     * 首先测试的是基本的数据类型
     * 
     * @throws Exception
     */
    @Test
    public void test1() throws Exception {
        String name = "Mark";
        int age = 20;
        boolean isAlive = true;

        MyBean myBean = new MyBean();
        BeanUtils.setProperty(myBean, "name", name);
        BeanUtils.setProperty(myBean, "age", age);
        // 对于boolean貌似不能进行转换
        // BeanUtils.setProperty(myBean, "isAlive", isAlive);
        System.out.println("Print the result by BeanUtils");
        System.out.println("Name:" + myBean.getName());
        System.out.println("Age:" + myBean.getAge());
        System.out.println("IsAlive:" + myBean.isAlive());
    }

    /**
     * 对Date进行转换测试
     * 
     * @throws Exception
     */
    @Test
    public void test2() throws Exception {
        String date = "2016-07-05";
        ConvertUtils.register(new DateLocaleConverter(), Date.class);
        MyBean myBean = new MyBean();
        BeanUtils.setProperty(myBean, "birthday", date);
        System.out.println("Birthday:" + myBean.getBirthday());

    }

    /**
     * 测试boolean类型的数据
     * 
     * @throws Exception
     */
    @Test
    public void test3() throws Exception {

        boolean isalive = true;
        ConvertUtils.register(new BooleanConverter(), Boolean.class);
        MyBean myBean = new MyBean();
        BeanUtils.setProperty(myBean, "isAlive", isalive);
        System.out.println("IsAlive:" + myBean.isAlive());
    }

    /**
     * 测试自定义的转换类
     * 
     * @throws Exception
     */
    @Test
    public void test4() throws Exception {
        MyClass myclass = new MyClass();
        myclass.setClassname("软测1414班");
        ConvertUtils.register(new Converter() {

            @Override
            public <T> T convert(Class<T> type, Object value) {
                MyClass myclass = (MyClass) value;
                return (T) myclass;
            }

        }, MyClass.class);
        MyBean myBean = new MyBean();
        BeanUtils.setProperty(myBean, "myclass", myclass);
        System.out.println("Customer Converter result:" + myBean.getMyclass().getClassname());

    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90

其中最关键的就是test4方法,这里采用的是JUnit的方式进行的代码测试,有不清楚的小伙伴们可以查阅一下相关于JUnit的使用哦。

/**
     * 测试自定义的转换类
     * 
     * @throws Exception
     */
    @Test
    public void test4() throws Exception {
        MyClass myclass = new MyClass();
        myclass.setClassname("软测1414班");
        ConvertUtils.register(new Converter() {

            @Override
            public <T> T convert(Class<T> type, Object value) {
                MyClass myclass = (MyClass) value;
                return (T) myclass;
            }

        }, MyClass.class);
        MyBean myBean = new MyBean();
        BeanUtils.setProperty(myBean, "myclass", myclass);
        System.out.println("Customer Converter result:" + myBean.getMyclass().getClassname());

    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

我们在代码中定义了一个泛型的转换器,其作用就是专门用于转换MyClass.class。只要遇到了这样的类,这个转换器的回调方法就会起作用。将其转换!这就是BeanUtils的核心思想。

总结

对于转换器而言,我们可以通过自定义一些转换器来减少代码的重复,而且可以更加方便的维护我们的代码。

但是,在具体的使用到一个转换器之前,我们一定要先想想,有没有内置的转换器呢?如果有的话,就不必重复的造轮子了。

下面 我就把BeanUtils内置的常用的转换器罗列一下吧。方便大家浏览。

  • AbstractArrayConverter
  • AbstractConverter
  • ArrayConverter
  • BigDecimalConverter
  • BooleanArrayConverter
  • BooleanConverter
  • ByteArrayConverter
  • ByteConverter
  • CalendarConverter
  • CharacterArrayConverter
  • CharacterConverter
  • ClassConverter
  • ConverterFacade
  • DateCOnverter
  • DateTimeConverter
  • DoubleConverter
  • FloatArrayConverter
  • FileConverter
  • FloatConverter
  • IntegerArrayConverter
  • IntegerConverter
  • LongConverter
  • LondArrayCOnverter
  • NumberConverter
  • ShortArrayConverter
  • ShortConverter
  • SqlTimeConverter
  • SqlTimestampConverter
  • StringArrayConverter
  • StringConverter
  • URLConverter

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

猜你喜欢

转载自www.cnblogs.com/djuwcnhwbx/p/10325671.html