BeanUtils.copyProperties()はidプロパティのコピーに失敗しました

po类中id有值,但是使用BeanUtils.copyProperties()拷贝出的vo类id属性为null,检查后发现是因为po继承的父类声明了一个泛型,部分代码如下:
public abstract class AbstractEntity<ID extends Serializable> implements Serializable {

    protected ID id;
    /**创建人*/
    protected ID createdBy;
    /**创建时间*/
    protected Date createdTime;

    /**最后一次修改人*/
    protected ID lastModifiedBy;
    /**最后一次修改时间*/
    protected Date lastModifiedTime;

    public void setId(ID id) {
        this.id = id;
    }

    public ID getId() {
        return this.id;
    }

BeanUtils.copyProperties()のソースコードを確認すると、次のように判断されます。

if (readMethod != null && ClassUtils.isAssignable(writeMethod.getParameterTypes()[0], readMethod.getReturnType())) 

setId()パラメータ型であるvoクラスのwriteMethodを取得するために実行されると、結果はLong型になり、getId()の戻り値型であるpoクラスのreadMethodは、結果になります。得られたものはSerializableであるため、BeanUtilsは属性タイプが異なると見なし、コピーされません。id属性。

解決策:poクラスがAbstractEntity <Long>を拡張した後に読み取られる型がLongではなく、親型である理由はまだ明確ではありません。Serializable,暂时先不用泛型,把id类型直接定义为Long,问题解决

おすすめ

転載: blog.csdn.net/noob9527/article/details/90168244