「Java」ConvertUtilsBean.registerメソッドで独自コンバーターを実装してコピー先の型に変換する方法
説明
コピー元とコピー先でプロパティーの型が異なる場合、独自コンバーターを実装してコピー先の型に変換します。
1.コピー元クラスの定義
package com.arkgame.study;
import java.util.Date;
public class SrcBean {
private String username;
//Date型createDate
private Date createDate;
public SrcBean(String username, Date createDate) {
this.username = username;
this.createDate = createDate;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
}
2.コピー先クラスの定義
package com.arkgame.study;
public class DestBean {
private Integer age;
// String型createDate
private String createDate;
public DestBean(Integer age, String createDate) {
this.age = age;
this.createDate = createDate;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getCreateDate() {
return createDate;
}
public void setCreateDate(String createDate) {
this.createDate = createDate;
}
}
■ 3.独自コンバーターでConverterを実装
package com.arkgame.study;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.beanutils.Converter;
public class ArkStringConverter implements Converter {
@SuppressWarnings({ "unchecked", "rawtypes" })
public Object convert(Class type, Object value) {
if (value == null) {
return (String) null;
} else if (value instanceof Date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(value);
} else {
return value.toString();
}
}
}
■ 4.getConvertUtils().registerで独自コンバーターを呼び出す
package com.arkgame.study;
import java.lang.reflect.InvocationTargetException;
import java.util.Date;
import org.apache.commons.beanutils.BeanUtilsBean;
import org.apache.commons.beanutils.ConvertUtilsBean;
public class BeanCopyPropDemo {
public static void main(String[] args) throws IllegalAccessException, InvocationTargetException {
// コピー元
SrcBean srcBean = new SrcBean("user001", new Date());
// コピー先
DestBean dstBean = new DestBean(34, "2020/10/26");
BeanUtilsBean bub = new BeanUtilsBean(
new ConvertUtilsBean(), BeanUtilsBean.getInstance().getPropertyUtils());
//独自ArkStringConverter String型への変換
bub.getConvertUtils().register(
new ArkStringConverter(), String.class);
//srcをdstへコピー
bub.copyProperties(dstBean, srcBean);
System.out.println("日付:"+dstBean.getCreateDate());
}
}
■実行結果
日付:2020-10-23 11:18:07