BeanUtils.copyProperties () no pudo copiar las propiedades de identificación

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;
    }

Verifique el código fuente de BeanUtils.copyProperties () y hay un juicio de la siguiente manera:

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

Cuando se ejecuta para obtener el método writeMethod de la clase vo, que es el tipo de parámetro setId (), el resultado es del tipo Long, mientras que el método readMethod de la clase po, que es el tipo de valor de retorno de getId (), el resultado obtenido es serializable, por lo que BeanUtils piensa que el tipo de atributo es diferente, por lo que no se copiará. id atributo.

Solución: aún no está claro por qué el tipo leído después de que la clase po se extiende AbstractEntity <Long> no es Long sino el tipo principalSerializable,暂时先不用泛型,把id类型直接定义为Long,问题解决

Supongo que te gusta

Origin blog.csdn.net/noob9527/article/details/90168244
Recomendado
Clasificación