使用 MapStruct 将摘要 class 映射到 DTO
Map abstract class to DTO with MapStruct
我找到了很多与此相关的主题,但在我看来所有的解决方案都走错了方向。
所以...我如何在这种情况下使用 MapStruct 映射?
摘要class人:
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);
}
不允许我映射摘要 class。我应该使用工厂方法。我试过了,但我根本不知道这个 factoy 方法应该是什么样子......
我的尝试:
@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 不知道如何映射到抽象 class,因为它无法实例化它。我希望您有一些 Person
的实现。您需要提供创建 Person
对象的方法,如下所示:
@Mapper
public interface PersonMapper {
Person toPerson(PersonDTO source);
PersonDTO toPersonDtO(Person source);
default Person createPerson() {
return new PersonImpl();
}
}
这样 MapStruct 将使用此方法创建 Person
实例,然后像往常一样映射属性。您可以在 the documentation.
中找到有关对象工厂的更多信息
我找到了很多与此相关的主题,但在我看来所有的解决方案都走错了方向。
所以...我如何在这种情况下使用 MapStruct 映射?
摘要class人:
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);
}
不允许我映射摘要 class。我应该使用工厂方法。我试过了,但我根本不知道这个 factoy 方法应该是什么样子......
我的尝试:
@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 不知道如何映射到抽象 class,因为它无法实例化它。我希望您有一些 Person
的实现。您需要提供创建 Person
对象的方法,如下所示:
@Mapper
public interface PersonMapper {
Person toPerson(PersonDTO source);
PersonDTO toPersonDtO(Person source);
default Person createPerson() {
return new PersonImpl();
}
}
这样 MapStruct 将使用此方法创建 Person
实例,然后像往常一样映射属性。您可以在 the documentation.