1. converters包
BeanUtils不仅提供了对象属性的操作,还提供了org.apache.commons.beanutils.converters,用于提供一些转换操作。
文档网址
http://commons.apache.org/proper/commons-beanutils/javadocs/v1.9.3/apidocs/index.html
主要类如下:
2数组转换器(测试发现已经弃用)
3普通转换器
3.1普通转换器总览
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