我正在尝试使用抽象类作为 MongoDB 文档的字段,使用 Spring Data。这是一个例子(我使用 lombok 作为 getter/setter):
@Data
@Document
public class User {
private String id;
private String name;
private List<Vehicle> vehicles;
}
@Data
public abstract class Vehicle {
private String type;
}
@Data
public class Car extends Vehicle {
private int seats;
private String fuel;
}
@Data
public class Motorcycle extends Vehicle {
private int cc;
}
很明显,这段代码不起作用,因为当我从数据库中读取数据时,它无法实例化 Vehicle 类。现在我的问题是:如何根据抽象类的类型字段自动实例化正确的子类?
提前致谢。
编辑:
我试过用下面的方法解决,但是好像不行:
@Data
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = Car.class, name = "CAR"),
@JsonSubTypes.Type(value = Motorcycle.class, name = "MOTORCYCLE")
})
public abstract class Vehicle {
private String type;
}
检查以下任何一项是否有效:
移除 JsonSubTypes 和 JsonTypeInfo 注释
检查您从“Vehicle”继承的类是否不包含 @TypeAlias(“Car/Moto”) 注释 - 此处给出的值将覆盖默认 MongoTemplate 配置中的“_class”字段。
从 MongoDb 数据库下载有问题的记录,并确保“_class”字段包含汽车/摩托车类的正确(完整)类路径。
可以试试@Document注解中的集合名称
更新与 Mongo 相关的驱动程序和库。