【问题标题】:Source and target share the same interface MapStruct源和目标共享同一个接口 MapStruct
【发布时间】:2015-07-09 23:15:15
【问题描述】:

您好,我在使用 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 and target share the same interface MapStruct

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

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

【问题讨论】:

    标签: java dto mapstruct


    【解决方案1】:

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

    RoleDto roleToRoleDto(IRole role);

    如果方法返回 IRole 接口,那么 mapstruct 现在可以进行映射。

    【讨论】:

      猜你喜欢
      • 2021-12-12
      • 1970-01-01
      • 2021-12-29
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      相关资源
      最近更新 更多