使用MapStruct将抽象类映射到DTO

时间:2020-03-26 13:26:38

标签: java mapping dto mapstruct java-ee-8

我找到了很多与此相关的主题,但是所有解决方案在我眼里都是错误的方向。

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

抽象类人物:

public abstract class Person implements Serializable{

     private String name;
     private String somethingToIgnore

     //Getter and Setter

}

常规Mapper不起作用:

@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);
}

我想念什么并且做错了什么? 预先感谢。

1 个答案:

答案 0 :(得分:2)

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中找到有关对象工厂的更多信息。