自定义org.apache.commons.beanutils的类型转换器

来源:互联网 发布:python中文注释报错 编辑:程序博客网 时间:2024/06/05 08:35

在使用org.apache.commons.Beanutils的populate方法时,需要将yyyy-MM-dd格式的字符串转换成java.util.Date,但是org.apache.commons.Beanutils的默认转换器只能将字符串转换成java.sql.Date,详见:org.apache.commons.beanutils.converters.DateTimeConverter的源码,我们可以自定义Convert对象:

import org.apache.commons.beanutils.Converter;       public class DateConvert implements Converter{           public Object convert(Class arg0, Object arg1) {            String p = (String)arg1;            if(p== null || p.trim().length()==0){                return null;            }            try{                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");                return df.parse(p.trim());            }            catch(Exception e){                return null;            }        }       }    

自定义对象转换类的使用: 
在使用之前先注册   
ConvertUtils.register(new DateConvert(), java.util.Date.class);   

因为要注册converter,所以不能再使用BeanUtils的静态方法了,必须创建BeanUtilsBean实例 
    BeanUtilsBean beanUtils = new BeanUtilsBean(convertUtils,new PropertyUtilsBean()); 
   beanUtils.setProperty(bean, name, value); 

项目开发案例: 

/** 
* 设置Struts 中数字<->字符串转换,字符串为空值时,数字默认为null,而不是0. 
* 也可以在web.xml中设置struts的参数达到相同效果,在这里设置可以防止用户漏设web.xml. 
*/

DateConverter: 

import java.text.SimpleDateFormat;import org.apache.commons.beanutils.Converter;import org.apache.commons.lang.StringUtils;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;/** * 简易DateConverter. * 供Apache BeanUtils 做转换,默认时间格式为yyyy-MM-dd,可由构造函数改变. * * @author calvin */public class DateConverter implements Converter {private static final Log log = LogFactory.getLog(DateConverter.class);private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");public DateConverter(String formatPattern) {if (StringUtils.isNotBlank(formatPattern)) {format = new SimpleDateFormat(formatPattern);}}public Object convert(Class arg0, Object value) {try {String dateStr = (String) value;if (StringUtils.isNotBlank(dateStr)) {return format.parse(dateStr);}} catch (Exception e) {log.error(e.getMessage(), e);}return null;}}


0 0