我有一种情况,我在DTO内部有另一个DTO,我必须将其映射到相应的实体。
我正在使用mapstruct,我已经有了AnotherEntityMapper。
DTO
public class EntityDTO {
private AnotherEntityDTO anotherEntityDTO;
// other fields
}
Entity
@Entity
public class Entity {
private AnotherEntity anotherEntity;
// other fields
}
如何更改EntityMapper界面,以便我可以将anotherEntityDTO映射到anotherEntity?
感谢。
答案 0 :(得分:3)
这实际上取决于您使用的是哪个版本的MapStruct。如果您使用1.2.0.Beta或更高版本,则可以在EntityMapper
界面上定义嵌套属性:
@Mapper
public interface EntityMapper {
@Mapping(target = "anotherEntity", source = "anotherEntityDTO")
@Mapping(target = "anotherEntity.propE", source = "anotherEntityDTO.propD")
Entity map(EntityDDTO dto);
}
另一个选项(如果您使用的版本低于1.2.0.Beta则必须使用)是在EntityMapper
中添加一个新方法,如:
@Mapper
public interface EntityMapper {
@Mapping(target = "anotherEntity", source = "anotherEntityDTO")
Entity map(EntityDDTO dto);
@Mapping(target = "propE", source = "propD")
AnotherEntity map(AnotherEntityDTO);
}
或者您可以为AnotherEntityMapper
定义新的Mapper AnotherEntity
并使用@Mapper(uses = {AnotherEntityMapper.class})
:
@Mapper
public interface AnotherEntityMapper {
@Mapping(target = "propE", source = "propD")
AnotherEntity map(AnotherEntityDTO);
}
@Mapper(uses = {AnotherEntityMapper.class}
public interface EntityMapper {
@Mapping(target = "anotherEntity", source = "anotherEntityDTO")
Entity map(EntityDDTO dto);
}
这实际上取决于您的使用案例。如果您需要在其他地方AnotherEntity
和AnotherEntityDTO
之间进行映射,我建议您使用新界面,以便在需要时重复使用