使用commons-beanutils把javabean转换成Map日期date不能自定义格式

        今天遇到一个功能需要将javabean的属性转换到map中,想到apache commons-beanutils的 BeanUtils工具类可能具有此功能。果然发现有个describe可以实现。试了下可以转换,但发现个问题,日期类型不能很好地转换,只能转换成Thu Sep 17 19:26:59 CST 2015这种格式,而我需要yyyy-MM-dd这种格式。翻了下源码发现有个日期转换器DateConverter,试了下注册到BeanUtilsBean中。

BeanUtilsBean beanUtilsBean = BeanUtilsBean.getInstance();
DateConverter converter = new DateConverter();
converter.setPattern("yyyy-MM-dd");
beanUtilsBean.getConvertUtils().register(new ConverterFacade(converter), java.util.Date.class);


但发现不起作用,继续阅读源码发现,它只用了StringConverter 一种转换器,代码如下。

 public String convert(Object value) {


        if (value == null) {
            return null;
        } else if (value.getClass().isArray()) {
            if (Array.getLength(value) < 1) {
                return (null);
            }
            value = Array.get(value, 0);
            if (value == null) {
                return null;
            } else {
                Converter converter = lookup(String.class);
                return (converter.convert(String.class, value));
            }
        } else {
            Converter converter = lookup(String.class);
            return (converter.convert(String.class, value));
        }


    }

没办法只好重新覆盖这段代码,最终代码如下:

public class ExtConvertUtilsBean extends ConvertUtilsBean{


@Override
public String convert(Object value) {
       if (value == null) {
           return null;
       } else if (value.getClass().isArray()) {
           if (Array.getLength(value) < 1) {
               return (null);
           }
           value = Array.get(value, 0);
           if (value == null) {
               return null;
           } else {
               Converter converter = lookup(String.class);
               return (converter.convert(String.class, value));
           }
       } else {
        Converter converter = null;
        if(value instanceof java.util.Date ){
        converter = lookup(java.util.Date.class);
        }else{
        converter = lookup(String.class);
        }
           return (converter.convert(String.class, value));
       }


}

}



 
  BeanUtilsBean beanUtilsBean = new BeanUtilsBean(new ExtConvertUtilsBean()); 
  
DateConverter converter = new DateConverter();
converter.setPattern(pattern);
beanUtilsBean.getConvertUtils().register(new ConverterFacade(converter), java.util.Date.class);
beanUtilsBean.describe(object);

至此可以实现日期自定义格式功能。

你可能感兴趣的:(java)