如何使用 MapStruct 转换接口?

How to convert an interface with MapStruct?

我在 mapStruct 文档中做了一些研究,但没有找到或理解我可以做些什么来实现这一目标:包含与平面 DTO 对象的接口的实体的对话。

这里是具有属性的实体:

public class Group {
    ...

    private IUser user;

    ...
}

这里是 DTO:

public GroupDTO {

    private Long idUser;

    private String username;
}

我们试试这个映射:

@Mappings({
        @Mapping(source = "user.id", target = "idUser"),
        @Mapping(source = "user.name", target = "username")})
GroupDTO toDTO(Group entity);

对于经典映射,mapStruct 会产生错误(IUser 是抽象的;无法实例化)。

有什么想法吗? 谢谢。

不确定这是最好的方法...

但是我们使用@AfterMapping 在默认方法中手动创建要在接口上实现的对象。

我们不得不删除@InheritInverseConfiguration 以进行反向操作。

它应该与 object factory method:

一起工作
public IUser createIUser() {
    return new User();
}

如果需要 IUser 的实例,将调用此工厂方法。