OwlFocus

beanutils 日期格式化问题

Error

1
org.apache.commons.beanutils.ConversionException: DateConverter does not support default String to 'Date' conversion.

原因

beanutils工具类不支持将日期转化成java.util.Date,但支持java.sql.Date。

解决

如果要将日期转化成java.util.Date,可实现一个日期转化器(org.apache.commons.beanutils.Converter),然后使用ConvertUtils类注册转化器(org.apache.commons.beanutils.ConvertUtils)。

转化器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package com.pft.common.beanutils.converters;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import org.apache.commons.beanutils.Converter;
/**
* ClassName:DateConverter <br/>
* Reason: 日期转换对象,使用该转换器,在ConvertUtils当中做一下注册,系统自动地帮助字符的日期表示转换为java.util.Date对象.
* Date: 2017年5月6日 下午1:03:25 <br/>
* @author lijian@12301.cc
* @version V0.1
* @since JDK 1.8
* @see
*/
public class StringToDateConverter implements Converter {
/**
* 日期格式化对象.
*/
private static SimpleDateFormat df = new SimpleDateFormat();
/**
* 模式集合.
*/
private static Set<String> patterns = new HashSet<String>(4);
// 注册一下日期的转换格式
static {
StringToDateConverter.patterns.add("yyyy-MM-dd");
StringToDateConverter.patterns.add("yyyy-MM-dd HH:mm");
StringToDateConverter.patterns.add("yyyy-MM-dd HH:mm:ss");
StringToDateConverter.patterns.add("yyyy/MM/dd HH:mm:ss");
}
/**
* 日期转换器.
*
* @param type
* Class
* @param value
* Object return Date Object.
*/
@SuppressWarnings("rawtypes")
public Object convert(Class type, Object value) {
if (value == null) {
return null;
}
if (value instanceof String) {
Object dateObj = null;
Iterator it = patterns.iterator();
while (it.hasNext()) {
try {
String pattern = (String) it.next();
df.applyPattern(pattern);
dateObj = df.parse((String) value);
break;
} catch (ParseException ex) {
// do iterator continue
}
}
return dateObj;
}
return null;
}
}

注册使用

1
2
ConvertUtils.register(new StringToDateConverter(), java.util.Date.class);
BeanUtilsBean2.getInstance().copyProperties(dest, orig);