我将使用ObjectMapper而不是ModelMapper。
在 父 类中,添加获取鉴别值的可能性。
//..public class Parent { @Column(name = "type", insertable = false, updatable = false) private String type; //getters and setters}您的ParentDTO应该映射到Child(*)DTO
@JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")@JsonSubTypes({ @JsonSubTypes.Type(value = ChildADTO.class, name = "child_a"), @JsonSubTypes.Type(value = ChildBDTO.class, name = "child_b")}) public abstract class ParentDTO { // .. }在转换服务/方法中,添加一个对象忽略未知的映射器(忽略您未在DTO类中声明的内容)
ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
只需调用:
Parent parent = // get from repositoryParentDTO parentDTO = objectMapper.readValue(objectMapper.writevalueAsBytes(parent), ParentDTO.class);
这样,您的ParentDTO总是用正确的类型实例化。



