自定義org.apache.commons.beanutils的型別轉換器
阿新 • • 發佈:2019-01-27
在使用org.apache.commons.Beanutils的populate方法時,需要將yyyy-MM-dd格式的字串轉換成java.util.Date,但是org.apache.commons.Beanutils的預設轉換器只能將字串轉換成java.sql.Date,詳見:org.apache.commons.beanutils.converters.DateTimeConverter的原始碼,我們可以自定義Convert物件:
import org.apache.commons.beanutils.Converter; public class DateConvert implements Converter{ public Object convert(Class arg0, Object arg1) { String p = (String)arg1; if(p== null || p.trim().length()==0){ return null; } try{ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); return df.parse(p.trim()); } catch(Exception e){ return null; } } }
自定義物件轉換類的使用:
在使用之前先註冊
ConvertUtils.register(new DateConvert(), java.util.Date.class);
因為要註冊converter,所以不能再使用BeanUtils的靜態方法了,必須建立BeanUtilsBean例項
BeanUtilsBean beanUtils = new BeanUtilsBean(convertUtils,new PropertyUtilsBean());
beanUtils.setProperty(bean, name, value);
專案開發案例:
/**
* 設定Struts 中數字<->字串轉換,字串為空值時,數字預設為null,而不是0.
* 也可以在web.xml中設定struts的引數達到相同效果,在這裡設定可以防止使用者漏設web.xml.
*/
DateConverter:
import java.text.SimpleDateFormat; import org.apache.commons.beanutils.Converter; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * 簡易DateConverter. * 供Apache BeanUtils 做轉換,預設時間格式為yyyy-MM-dd,可由建構函式改變. * * @author calvin */ public class DateConverter implements Converter { private static final Log log = LogFactory.getLog(DateConverter.class); private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); public DateConverter(String formatPattern) { if (StringUtils.isNotBlank(formatPattern)) { format = new SimpleDateFormat(formatPattern); } } public Object convert(Class arg0, Object value) { try { String dateStr = (String) value; if (StringUtils.isNotBlank(dateStr)) { return format.parse(dateStr); } } catch (Exception e) { log.error(e.getMessage(), e); } return null; } }