源和目标共享相同的接口 MapStruct

Source and target share the same interface MapStruct

您好,我在使用 MapStruct 时遇到以下问题,我有下一个接口:

public interface IRole {
    String getName();        
    void setName(String name);
}

public interface IUser {
    public String getUsername();
    public void setUsername(String username);
    public IRole getRole();
    public void setRole(IRole role);
    public String getPassword();
    public void setPassword(String password);
}

我有两个实现:

UserUserDtoRoleRoleDto.

我创建了一个名为 UserMapper 的映射器:

@Mapper
public interface UserMapper {

    UserDto userToUserDto(User user);

    RoleDto roleToRoleDto(Role user);

}

问题是当我尝试将 User 转换为 UserDto 时,角色对象没有转换,我正在执行下一个主要方法:

public static void main(String[] args) {
    UserMapper instance = Mappers.getMapper( UserMapper.class );
    Role r=new Role();
    r.setName("Admin");
    User user=new User();
    user.setUsername("Alex");
    user.setPassword("Raidentrance123");
    user.setRole(r);
    UserDto dto=instance.userToUserDto(user);
    System.out.println(dto.getUsername());      
    System.out.println(dto.getRole().getClass());       
}

结果是:

Alex class com.raidentrance.model.Role

我预计

Alex class com.raidentrance.model.RoleDto

这是我的问题的详细信息

Here is my code 我不确定 Jackson 中是否有类似 @JsonDeserialize(as=Impl.class) 或 JPA 中的 目标实体

注意:我在 github 存储库的分支工程中有一个解决方案。我在那里将 getRole 的数据类型从 IRole getRole() 更改为 RoleDto getRole() 并且它有效,但我正在寻找我提到的东西。

您必须为接口定义一个映射方法:

RoleDto roleToRoleDto(IRole role);

所以 mapstruct 现在可以做一个映射,如果一个方法 returns 一个 IRole 接口。