TypeConverter类型转换

前不久在Spring的SimpleTypeConverter基础上扩展实现了我想要的对象类型的转换,当然前提是他们能够互转,一般我们不会要求把"abc"转成数字的吧。

下面是spring支持的一些基本的类型转换:
Integer <-> String
Boolean <-> String
Long <-> String
Long <-> Integer
...

在这个基础上扩展了日期与字符串、日期与long、util.Date与sql.Date互转,代码如下:

public class CustomDateEditor extends PropertyEditorSupport {

private DateFormat formatter;

public CustomDateEditor(String dateFormat) {
this.formatter = new SimpleDateFormat(dateFormat);
}

/**
* <pre>
* 对象转日期
* java.sql.Date -> java.util.Date
* String -> java.util.Date
* Long -> java.util.Date
* Calandar -> java.util.Date
* </pre>
*/
@Override
public void setValue(Object o) {
if (o instanceof java.sql.Date) {
super.setValue(new Date(((java.sql.Date) o).getTime()));
} else if (o instanceof String) {
setAsText((String) o);
} else if (o instanceof Long) {
super.setValue(new Date((Long) o));
} else if (o instanceof Calendar) {
super.setValue(((Calendar) o).getTime());
} else {
super.setValue(o);
}
}

/**
* 字符串转日期
*/
@Override
public void setAsText(String dateStr) {
if (dateStr != null) {
try {
super.setValue(formatter.parse(dateStr));
} catch (ParseException e) {
throw new IllegalArgumentException("Could not parse date: " + e.getMessage());
}
} else {
super.setValue(null);
}
}

/**
* 日期转字符串
*/
public String getAsText() {
Object v = this.getValue();
return v == null ? "" : formatter.format((Date) v);
}
}


public class CustomSqlDateEditor extends PropertyEditorSupport {

private DateFormat formatter;

public CustomSqlDateEditor(String dateFormat) {
this.formatter = new SimpleDateFormat(dateFormat);
}

/**
* 对象转sql.Date
*/
@Override
public void setValue(Object o) {
if (o instanceof java.util.Date) {
super.setValue(new Date(((java.util.Date) o).getTime()));
} else if (o instanceof String) {
setAsText((String) o);
} else if (o instanceof Long) {
super.setValue(new Date((Long) o));
} else if (o instanceof Calendar) {
super.setValue(new Date(((Calendar) o).getTimeInMillis()));
} else {
super.setValue(o);
}
}

/**
* 字符串转sql.Date
*/
@Override
public void setAsText(String dateStr) {
if (dateStr != null) {
try {
super.setValue(new Date(formatter.parse(dateStr).getTime()));
} catch (ParseException e) {
throw new IllegalArgumentException("Could not parse date: " + e.getMessage());
}
} else {
setValue(null);
}
}

/**
* sql.Date转字符串
*/
public String getAsText() {
Object v = this.getValue();
return v == null ? "" : formatter.format((Date) v);
}
}


再将我们定制的editor注册到converter中,从而定制自己的类型转换方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值