使用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);
至此可以实现日期自定义格式功能。
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);
至此可以实现日期自定义格式功能。
相关文章推荐
- javaweb
- Java中Properties类的操作
- java计算文件的MD5值
- javase2
- javase
- 大龄屌丝自学笔记--Java零基础到菜鸟--019
- leetcode:151Reverse Words in a String java实现
- 如何利用 JConsole观察分析Java程序的运行,进行排错调优
- java学习之Map集合
- Java读写MySQL数据库小实例
- Java 内存区域和GC机制以及JVM(Java虚拟机)优化大全和案例实战
- 深入理解Java的接口和抽象类
- Java学习笔记04 异常
- 在Eclipse里查看Java字节码
- Struts2 显示日期类型
- java.net.SocketException四大异常解决方案
- 用netbeans编的简易计算器
- java_流
- Eclipse常用快捷键
- java 编程思想阅读笔记(4)