您好我使用 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()
并且它可以工作,但我正在寻找像我提到的那样。
答案 0 :(得分:1)
您必须为界面定义映射方法:
RoleDto roleToRoleDto(IRole role);
因此,如果方法返回IRole接口,那么mapstruct现在可以进行映射。