0

您好,我在使用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 时,角色对象没有被转换,我正在执行下一个 main 方法:

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 类 com.raidentrance.model.Role

我期待

Alex 类 com.raidentrance.model.RoleDto

这是我的问题详细Source 和 target 共享相同的接口 MapStruct

这是我的代码,我不确定 Jackson 中是否有类似@JsonDeserialize(as=Impl.class)或 JPA 中的targetEntity

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

4

1 回答 1

1

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

RoleDto roleToRoleDto(IRole role);

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

于 2015-07-28T09:39:31.013 回答