0

BeanUtils を使用して、Data(java.util.Date) 値をソースからターゲットにコピーしようとしました。日付から文字列への変換例外が発生します。

そのような問題の解決策は何ですか?

私の実装は次のとおりです..

 import java.util.Date;

 public class Bean1 {

 private Date date;

 public Bean1() {

   }

 public Date getDate() {
   return date;
   }

 public void setDate(Date date) {
   this.date = date;
   }

}

================================================== =========

import java.util.Date;

public class Bean2 {

private Date date;

public Bean2() {

}

public Date getDate() {
    return date;
}

public void setDate(Date date) {
    this.date = date;
}

}

================================================== =========

次のように私のコピープロパティメソッド

    public static void copyProperties(Object src, Object dest) throws   llegalAccessException,InvocationTargetException, NoSuchMethodException {
         Field[] attributes = dest.getClass().getDeclaredFields();
         for (Field property : attributes) {              
           BeanUtils.setProperty(dest, property.getName(), BeanUtils.getProperty(
                src, property.getName()));
    }
}
4

2 に答える 2

5

BeanUtils の最新バージョンは、Date プロパティの直接コピーをサポートしていません。コンバーター (これも benutils パッケージの一部) を実装し、そのコンバーターをプロパティのコピー メソッドで使用する必要があります。これは、2 つのオブジェクトの Date プロパティの形式に違いが生じるエラーを回避するためです。次のようなものがあなたのために働くでしょう

    public static void copyProperties(Object arg0, Object arg1) 
            throws IllegalAccessException, InvocationTargetException {
        java.util.Date defaultValue = null;
        Converter converter = new DateConverter(defaultValue);
        BeanUtilsBean beanUtilsBean = BeanUtilsBean.getInstance(); 
        beanUtilsBean.getConvertUtils().register(converter, java.util.Date.class);
        beanUtilsBean.copyProperties(arg0, arg1);
    }

両方のオブジェクトの日付形式が同じままであることが確実な場合は、PropertyUtils を使用することをお勧めします。ソースと宛先の日付プロパティの日付形式が異なる可能性がある場合にのみ、コンバーターを使用する必要があります。

于 2013-05-15T09:57:39.233 に答える
0

コピーは、リフレクションを使用して簡単に実行できます。Fieldクラスには、このシナリオで簡単に適用できるメソッドがgetあります。set

public static void main(String[] args) throws SecurityException, IllegalArgumentException, NoSuchFieldException, IllegalAccessException {
    Bean1 bean1 = new Bean1();
    bean1.setDate(new Date());

    Bean2 bean2 = new Bean2();
    System.out.println(bean2.getDate());

    copyProperties(bean1, bean2);

    System.out.println(bean2.getDate());    
}

public static void copyProperties(Object src, Object dest) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
    Field[] attributes = dest.getClass().getDeclaredFields();
    for (Field property : attributes) {
        boolean isPrivate = false;
        if(!property.isAccessible()){
            property.setAccessible(true);
            isPrivate = true;
        }
        Field srcField = src.getClass().getDeclaredField(property.getName());
        property.set(dest, srcField.get(src));

        if(isPrivate){
            property.setAccessible(false);
        }
    }
}
于 2013-05-15T09:34:27.323 に答える