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);
    }

    /**
     * 
     * 对象转日期
     * java.sql.Date -> java.util.Date
     * String -> java.util.Date
     * Long -> java.util.Date
     * Calandar -> java.util.Date
     * 
*/ @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中,从而定制自己的类型转换方式。

你可能感兴趣的:(Java,SQL,Spring)