我正在使用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(){}
//...
我正在尝试从db中检索这个具体类
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,是一个抽象类,每个用户类型都有具体的类。它们都有没有参数的构造函数。问题是什么?
3条答案
按热度按时间iibxawm41#
您正尝试将一个具体类Map到一个抽象类,这将不起作用。您不能将
Abstract Class
用作目标。为什么?它不能被示例化。因此您必须使用一个具体类。毫无疑问,它不能用于带有抽象类目的地的Map:
必须使用扩展抽象类的具体类
然后将其Map到这个具体类:
型
更多信息:
由于不可能示例化抽象类,因此它在目标属性中也不起作用。
Github中有一个与此相关的问题:https://github.com/jhalterman/modelmapper/issues/130
roejwanj2#
当setter和getter或参数化构造函数中具有基元数据类型或基元返回类型时,会发生此错误
因此,您需要在此处删除以下代码
它会工作得很好。
f0brbegy3#
解决我的问题是使用typeMap和更新ModelMapper的版本。请参考以下链接:-
Mapping Lists with ModelMapper
使用typeMap仍然给我同样的错误。然后我将我的ModelMapper版本从
2.0.0
更新到2.3.5
,问题解决了。