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>