java - 使用 MapStruct 将抽象类映射到 DTO

标签 java mapping dto mapstruct java-ee-8

我发现了很多与此相关的主题,但在我看来,所有解决方案都走向了错误的方向。

那么...在这种情况下我该如何使用 MapStruct 映射?

抽象类Person:

public abstract class Person implements Serializable{

     private String name;
     private String somethingToIgnore

     //Getter and Setter

}

普通的映射器不起作用:

@Mapper(componentModel = 'cdi')
public interface PersonMapper{

    @Mapping(target = 'somethingToIgnore', ignore = 'true')
    Person toPerson(PersonDTO source);

    @InheritInverseConfiguration
    PersonDTO toPersonDtO(Person source);

}

我不允许映射抽象类。我应该使用工厂方法。我尝试过,但我根本不知道这个工厂方法应该是什么样子......

我的尝试:

@Mapper
public interface PersonMapper {

    PersonMapper INSTANCE = Mappers.getMapper( PersonMapper.class );

    Person toPerson(PersonDTO source);

    PersonDTO toPersonDtO(Person source);
}

@Mapper
public abstract class PersonMapper {

    public static final PersonMapper INSTANCE = Mappers.getMapper( PersonMapper.class );

    Person toPerson(PersonDTO source);

    PersonDTO toPersonDtO(Person source);
}

我错过了什么并且做错了什么? 提前致谢。

最佳答案

MapStruct 不知道如何映射到抽象类,因为它无法实例化它。我希望您有一些 Person 的实现。您需要提供创建 Person 对象的方法,如下所示:

@Mapper
public interface PersonMapper {

    Person toPerson(PersonDTO source);

    PersonDTO toPersonDtO(Person source);

    default Person createPerson() {
        return new PersonImpl();
    }
}

这样,MapStruct 将使用此方法创建 Person 实例,然后像平常一样映射属性。您可以在the documentation中找到有关对象工厂的更多信息。 .

关于java - 使用 MapStruct 将抽象类映射到 DTO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60868345/

相关文章:

java - 计算器程序中的用户输入错误

java - MongoCleaner 线程数变得非常高

java - 扩展已经实现接口(interface)的抽象类的类是否需要接口(interface)?

c# - Entity Framework 数据传输对象最佳实践

c# - AutoMapper 的多态性

java - 最后一行仅在 Java 中部分打印

java - 在 Hibernate 中映射 Map<String,Foo>

string - 如何将 "y"/"n"列映射到 Scala 的 Slick 中的 boolean 值?

sql-server-2008 - intellij 想法,生成具有关系的持久性映射

java - Hibernate 对象和 GWT-RPC