ConvertUtils,这个工具类的职能是在字符串和指定类型的实例之间进行转换。

 

 

目前支持的类型有:

 

 

  • java.lang.BigDecimal

     

  • java.lang.BigInteger

     

  • boolean and java.lang.Boolean

     

  • byte and java.lang.Byte

     

  • char and java.lang.Character

     

  • java.lang.Class

     

  • double and java.lang.Double

     

  • float and java.lang.Float

     

  • int and java.lang.Integer

     

  • long and java.lang.Long

     

  • short and java.lang.Short

     

  • java.lang.String

     

  • java.io.File

     

  • java.net.URL

     

  • java.sql.Date

     

  • java.sql.Time

     

  • java.sql.Timestamp

     

总体提供两类功能:

 

 

1.         将字符串转换为指定类型;

 

 

2.         注册、注销和查询类型转换器;

convert(java.lang.Object value)

将任意的实例转变为String,用法非常简单。在尝试的过程中,感觉与调用实例上的toString()方法的效果一样,不知道是不是在这个方法内仅仅是调用了传入实例的toString()方法。

ps:需要读源代码才能清楚。

convert(java.lang.String value, java.lang.Class clazz)

 

将字符串value转换为clazz的一个实例;如果失败的话,就以String的形式返回value

 

 

convert(java.lang.String[] values, java.lang.Class clazz)

 

这个方法是对前一方法的加强版,将数组中的每个value都进行转换,最后以Object返回。(数组也是Object啊)

 

 

deregister()和deregister(java.lang.Class clazz)

注销转换器,前者将所有的转换器注销掉,后者只注销对应于clazz的转换器。注销在这里不是彻底删除了,而是将转换器变为默认的转换器(apache commons提供的)。

lookup(java.lang.Class clazz)

获取指定类型clazz的转换器.

register(Converter converter, java.lang.Class clazz)

为指定类型clazz注册转换器converter。如果clazz已经存在一个对应的转换器,那么converter,将覆盖原来的转换器。也就是说,我们可以为String,Double创建自定义的类型转换器,并在注册后进行使用。

ps:apache的类定义明确,描述非常清楚,所以就不贴出例子了。当然这只是到达可以正常使用的阶段,如果要进行改造或者创建自己的ConvertUtils,那可能需要更多的时间,因为还要去参考ConvertUtilsBean,这里就不详述了。

以下为使用convertUtils的一个DATE类型的例子(该例子来源于尚学堂视屏)
1.定义converter

 1package com.bjsxt.oa.web;
 2
 3import java.text.ParseException;
 4import java.text.SimpleDateFormat;
 5import java.util.Date;
 6
 7import org.apache.commons.beanutils.Converter;
 8
 9public class UtilDateConverter implements Converter {
10    
11    private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
12
13    public Object convert(Class type, Object value) {
14        if (value == null{
15            return value;
16        }

17        if (value instanceof Date) {
18            return value;
19        }

20        if (value instanceof String) {
21            try {
22                return format.parse((String)value);
23            }
 catch (ParseException e) {
24                e.printStackTrace();
25            }

26        }

27        return null;
28    }

29
30}

31
2.使用convertUilts注册converter
 1package com.bjsxt.oa.web;
 2
 3import java.util.Date;
 4
 5import javax.servlet.ServletException;
 6import javax.servlet.http.HttpServlet;
 7
 8import org.apache.commons.beanutils.ConvertUtils;
 9
10public class UtilDateConverterInitServlet extends HttpServlet {
11
12    @Override
13    public void init() throws ServletException {
14         ConvertUtils.register(new UtilDateConverter(), Date.class);
15    }

16
17}

18
3.在web.xml中配置servlet
1 <servlet>
2    <servlet-name>utilDateConverter</servlet-name>
3    <servlet-class>com.bjsxt.oa.web.UtilDateConverterInitServlet</servlet-class>
4    <load-on-startup>3</load-on-startup>
5  </servlet>