我正在使用 mongodb,所以我将实体与创建 DTO 的表示层分离(使用 hibernate-validator 注释)。
public abstract class UserDTO {
private String id;
@NotNull
protected String firstName;
@NotNull
protected String lastName;
protected UserType type;
protected ContactInfoDTO contact;
protected List<ResumeDTO> resumes;
public UserDTO(){}
//...
我正在尝试从数据库中检索这个具体类
public class UserType1DTO extends UserDTO {
private CompanyDTO company;
public UserType1DTO(){
super();
}
public UserType1DTO(String firstName, String lastName, ContactInfoDTO contact, CompanyDTO company) {
super(UserType.type1, firstName, lastName, contact);
this.company = company;
}
/...
像这样:
return mapper.map((UserType1) entity,UserType1DTO.class);
我收到关于无法实例化的错误 ResumeDTO
Failed to instantiate instance of destination *.dto.ResumeDTO. Ensure that *.dto.ResumeDTO has a non-private no-argument constructor.
ResumeDTO 类似于 UserDTO,是一个抽象类,并且针对每个用户类型都有具体的类。他们都有没有参数的构造函数。问题是什么?
原文由 anat0lius 发布,翻译遵循 CC BY-SA 4.0 许可协议
您正在尝试将具体类映射到抽象类,这是行不通的。您不能将
Abstract Class
用作目的地。为什么?它不能被实例化。所以你必须使用一个具体的类毫无疑问,它不适用于具有抽象类目的地的地图:
您必须使用扩展抽象类的具体类
然后将其映射到这个具体类:
更多信息:
由于不可能实例化一个抽象类,它也不会在目标属性中工作。
Github 中有一个与此相关的问题: https ://github.com/jhalterman/modelmapper/issues/130