您的位置:首页 > 编程语言 > Java开发

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

2015-09-17 19:23 519 查看
今天遇到一个功能需要将javabean的属性转换到map<String,String>中,想到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);

至此可以实现日期自定义格式功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: