继承父类的实体对象没打印出来父级属性问题
继承父类的实体对象没打印出来父级属性问题
@Data
public class BaseEntity {
/**
* 创建人
*/
private String createdBy;
}
@Data
public class UserDto extends BaseEntity {
/**
* 姓名
*/
private String name;
/**
* 密码
*/
private String password;
}
在打印json串日志的时候 , 发现没有 BaseEntity 对象里面的属性 createdBy
原因分析:
Lombok 的 @Data 注解会为当前类生成 toString()、equals()、hashCode() 等方法,但它不会自动包含父类的属性。如果你没有显式处理父类的属性,父类的属性将不会被包含在生成的 toString() 方法中。
解决方法:
可以通过以下两种方式解决:
1. 手动重写 toString() 方法:在子类中手动重写 toString() 方法,并调用父类的 toString() 方法。能用lombok的就不需要手动重写toString方法 !!!
2. 使用 Lombok 的 @ToString(callSuper = true) 注解:显式告诉 Lombok 在生成 toString() 方法时包含父类的属性。
最终解决方案:
在实体对象加上注解 , 主要是 callSuper = true , 继承父级属性
@ToString(callSuper = true)
@ToString(callSuper = true)
@Data
public class UserDto extends BaseEntity {
/**
* 姓名
*/
private String name;
/**
* 密码
*/
private String password;
}