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

时间:2015-07-09 23:15:16

标签: java dto 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);
}

我有两个实现:

用户 UserDto 角色 RoleDto

我创建了一个名为UserMapper的Mapper:

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

我希望

  

Alex class com.raidentrance.model.RoleDto

以下是我的详细问题Source and target share the same interface MapStruct

Here is my code我不确定Jackson中是否存在 @JsonDeserialize(as = Impl.class)或JPA targetEntity < / p>

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

1 个答案:

答案 0 :(得分:1)

您必须为界面定义映射方法:

RoleDto roleToRoleDto(IRole role);

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