淘先锋技术网

首页 1 2 3 4 5 6 7

Apache类库之BeanUtils

1. converters包

BeanUtils不仅提供了对象属性的操作,还提供了org.apache.commons.beanutils.converters,用于提供一些转换操作。

文档网址

http://commons.apache.org/proper/commons-beanutils/javadocs/v1.9.3/apidocs/index.html

主要类如下:

·        AbstractArrayConverter

·        AbstractConverter

·        ArrayConverter

·        BigDecimalConverter

·        BigIntegerConverter

·        BooleanArrayConverter

·        BooleanConverter

·        ByteArrayConverter

·        ByteConverter

·        CalendarConverter

·        CharacterArrayConverter

·        CharacterConverter

·        ClassConverter

·        ConverterFacade

·        DateConverter

·        DateTimeConverter

·        DoubleArrayConverter

·        DoubleConverter

·        FileConverter

·        FloatArrayConverter

·        FloatConverter

·        IntegerArrayConverter

·        IntegerConverter

·        LongArrayConverter

·        LongConverter

·        NumberConverter

·        ShortArrayConverter

·        ShortConverter

·        SqlDateConverter

·        SqlTimeConverter

·        SqlTimestampConverter

·        StringArrayConverter

·        StringConverter

·        URLConverter

2数组转换器(测试发现已经弃用)

·        AbstractArrayConverter

·        BooleanArrayConverter

·        CharacterArrayConverter

·        DoubleArrayConverter

·        FloatArrayConverter

·        IntegerArrayConverter

·        LongArrayConverter

·        StringArrayConverter

·        ShortArrayConverter

·        ByteArrayConverter

3普通转换器

3.1普通转换器总览

·        AbstractConverter

·        ArrayConverter

·        BigDecimalConverter

·        BigIntegerConverter

·        BooleanConverter

·        ByteConverter

·        CalendarConverter

·        CharacterConverter

·        ClassConverter

·        ConverterFacade

·        DateConverter

·        DateTimeConverter

·        DoubleConverter

·        FileConverter

·        FloatConverter

·        IntegerConverter

·        LongConverter

·        NumberConverter

·        ShortConverter

·        SqlDateConverter

·        SqlTimeConverter

·        SqlTimestampConverter

·        StringConverter

·        URLConverter

3.2 BooleanConverter

User类

public class User {
   
private String name;
    private
Date birthday;
    private
Boolean gender; //true. false.

   
public User(String name, Date birthday) {
       
this.name = name;
        this
.birthday = birthday;
   
}

   
public User() {
    }
    getter()and setter()
}

给user增加一个Boolean类型的数据,但是传入的值是String类型

   private static void test2() throws InvocationTargetException, IllegalAccessException {
//        {"true", "yes", "y", "on", "1"};
//        {"false", "no", "n", "off", "0"};
        String  gender = "yes";
        ConvertUtils.register(new BooleanConverter(),Boolean.class);
        User user = new User();
        BeanUtils.setProperty(user,"gender",gender);
        System.out.println(user.getGender());

    }

测试发现,传入"true", "yes", "y", "on","1"会自动将其转化为true,传入false", "no", "n", "off","0"会自动将其转化为false。

3.3StringConverter

将其他类型转化为string,这个

3.4ArrayConverter

第一种情况:一般不用。

 

·         String valueString = "Foo,Bar";
ArrayConverter arrayConverter = new ArrayConverter(String[].class, new StringConverter());
String[] valueArray = arrayConverter.convert(String[].class, valueString);
System.out.println(JSON.toJSONString(valueArray));

输出["Foo","Bar"],由此可见将一个含有“,”的字符串转化为字符串数组。

第二种情况:

valueString = "{Foo,Bar}";
valueArray = arrayConverter.convert(String[].class, valueString);
System.out.println(JSON.toJSONString(valueArray));

输出["Foo","Bar"],由此可见可以吧{}自动去掉。

第三种情况:

valueString = "Foo_Bar";
valueArray = arrayConverter.convert(String[].class, valueString);
System.out.println(JSON.toJSONString(valueArray));

输出["Foo","Bar"],由此可见“,”,“_”的字符串都可以呗分割。

第四种情况:

arrayConverter.setAllowedChars(new char[]{'_'});
valueArray = arrayConverter.convert(String[].class, valueString);
System.out.println(JSON.toJSONString(valueArray));

将“_”默认为允许,这样字符串不会被分割。

输出结果为:["Foo_Bar"]

第六种情况:

既然可以选择允许的字符,那也应该会能定义分割的字符。

看程序

String valueString1 = "1*2*3";
ArrayConverter arrayConverter1 = new ArrayConverter(Integer[].class, new IntegerConverter());
arrayConverter1.setDelimiter('*');
Integer[] valueArray1 = arrayConverter1.convert(Integer[].class, valueString1);
System.out.println(JSON.toJSONString(valueArray1));

原来分隔符是可以自定义的,怪不得CharacterArrayConverter过时了。

第六种情况:

String valueString1 = "1,2";
ArrayConverter arrayConverter1 = new ArrayConverter(Integer[].class, new IntegerConverter());
Integer[] valueArray1 = arrayConverter1.convert(Integer[].class, valueString1);
System.out.println(JSON.toJSONString(valueArray1));

可以将字符串数组转化为int数组。

输出结果为:[1,2]

3.5IntegerConverter

int[] values = new int[]{1, 2};
ArrayConverter arrayConverter = new ArrayConverter(Integer[].class, new IntegerConverter());
String value = arrayConverter.convert(String.class, values);
System.out.println(JSON.toJSONString(value));

arrayConverter.setOnlyFirstToString(false);
value = arrayConverter.convert(String.class, values);
System.out.println(JSON.toJSONString(value));
运行结果
"1"
"1,2"
默认只转换指针为0的。

4.时间转换器DateLocaleConverter

User user = new User();
String birtthday = "1991-5-22";
ConvertUtils.register(new DateLocaleConverter(),Date.class);
BeanUtils.setProperty(user,"birthday",birtthday);
System.out.println(user.getBirthday());

输出结果:Wed May 22 00:00:00 CDT 1991  把字符串转化为Date类型。只要简单的注册就可以,不用写拦截器之类了。

另外还可以自定义格式。

User user = new User();
String birtthday = "1991#5#22";
DateConverter dateLocaleConverter = new DateConverter();
dateLocaleConverter.setPattern("yyyy#MM#dd");
ConvertUtils.register(dateLocaleConverter,Date.class);
BeanUtils.setProperty(user,"birthday",birtthday);
System.out.println(user.getBirthday());

输出结果为:Wed May 22 00:00:00 CDT 1991