gpt4 book ai didi

java - ModelMapper - 无法实例化目标实例

转载 作者:可可西里 更新时间:2023-11-01 10:41:07 26 4
gpt4 key购买 nike

我正在使用 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,是一个抽象类,对于每个用户类型都有具体的类。他们都有没有参数的构造函数。有什么问题?

最佳答案

您正试图将一个具体类映射到一个抽象类,这是行不通的。您不能将 抽象类 用作目标。为什么?它不能被实例化。所以你必须使用一个具体的类

毫无疑问,它不适用于带有抽象类目的地的 map :

mapper.map(entity, AbstractClass.class);
/*Error: java.lang.InstantiationException
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at java.lang.Class.newInstance(Class.java:442)*/

您必须使用扩展抽象类的具体类

public class ConcreteClass extends AbstractClass {
//
}

然后将其映射到这个具体类:

mapper.map(entity, ConcreteClass.class);

更多信息:

由于无法实例化抽象类,它也不会在目标属性中工作。

Github 中有一个与此相关的问题:https://github.com/jhalterman/modelmapper/issues/130

关于java - ModelMapper - 无法实例化目标实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42551247/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com