使用@MappedSuperclass时子类无法继承父类属性的问题排查
解决方案:父类属性无法序列化返回的问题
问题根源很明确:你的父类Auction里的字段都是private修饰,且没有添加@Getter/@Setter注解。子类InverseAuction上的@Getter/@Setter只会生成自身字段的访问器,不会处理父类的私有字段,Jackson序列化时拿不到父类字段的值,自然就不会返回这些属性。
给你两种可行的解决办法:
方法一:给父类添加Lombok注解
直接在父类Auction上加上@Getter和@Setter,这样父类所有字段的getter/setter都会被生成,Jackson就能正常序列化这些字段了:
@MappedSuperclass @Getter @Setter public abstract class Auction { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; @Column(nullable = false) private String title; @Column private String description; @Column private String category; @Column(nullable = false) private long sellerId; @Column private String urlPicture; }
方法二:手动编写父类字段的getter方法
如果不想用Lombok的全局注解,也可以给父类的每个字段手动写getter方法,比如:
@MappedSuperclass public abstract class Auction { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; @Column(nullable = false) private String title; // 给每个字段添加getter public long getId() { return id; } public String getTitle() { return title; } // 剩下的description、category、sellerId、urlPicture同理添加getter }
注意:JPA的@MappedSuperclass只负责数据库映射,和JSON序列化没有关系,序列化的关键是Jackson能通过getter方法访问到字段值。
内容的提问来源于stack exchange,提问作者AlchemistSteel
相关产品推荐
相关产品推荐

