概述
前不久在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中,从而定制自己的类型转换方式。
最后
以上就是明亮棒球为你收集整理的TypeConverter类型转换的全部内容,希望文章能够帮你解决TypeConverter类型转换所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复