MapStruct 将列表设置为字段
MapStruct set List as field
我在 Lombok 中使用 Map Struct 来回映射 DTO 和 Entity 但发生在一个案例中:
@Mapper(uses = {RoleMapper.class})
public interface UserMapper {
UserDto userToUserDto(User user);
default User signUpRequestDtoToUser(SignUpRequestDto dto) {
return User.builder()
.roles(dto.roleIds.stream().map(id -> Role.builder().id(id).build()).collect(Collectors.toList()))
.username(dto.getUsername())
.password(dto.getPassword())
.isEnabled(dto.getIsEnabled())
.build();
}
default UserFilter toUserFilter(UserFilterDto dto) {
return UserFilter.builder()
.isEnabled(dto.getIsEnabled())
.username(dto.getUsername())
.roles(
Objects.nonNull(dto.getRoleIds())
? dto.getRoleIds().stream().map(id -> Role.builder().id(id).build()).collect(Collectors.toList())
: Collections.emptyList())
.build();
}
}
在其他情况下,我使用这样的注释:@Mapping(target = "advisor.id", source = "advisorId")
从 id
创建对象。它在 parent 包含一个实例的情况下起作用。但是 User
和 UserFilter
有 List<Role>
作为字段。
如何用注释替换default
方法?
从我在你的例子中看到的,我假设你也可以在这种情况下使用注释:只需创建一个方法来映射 RoleId
和 Role
并且 Mapstruct 将实现这个方法并在尝试映射这些模型的集合时自动调用它的方法:
@Mapping(source = "id", target = "id")
Role mapRoleIdToRole(RoleId roleId);
我在 Lombok 中使用 Map Struct 来回映射 DTO 和 Entity 但发生在一个案例中:
@Mapper(uses = {RoleMapper.class})
public interface UserMapper {
UserDto userToUserDto(User user);
default User signUpRequestDtoToUser(SignUpRequestDto dto) {
return User.builder()
.roles(dto.roleIds.stream().map(id -> Role.builder().id(id).build()).collect(Collectors.toList()))
.username(dto.getUsername())
.password(dto.getPassword())
.isEnabled(dto.getIsEnabled())
.build();
}
default UserFilter toUserFilter(UserFilterDto dto) {
return UserFilter.builder()
.isEnabled(dto.getIsEnabled())
.username(dto.getUsername())
.roles(
Objects.nonNull(dto.getRoleIds())
? dto.getRoleIds().stream().map(id -> Role.builder().id(id).build()).collect(Collectors.toList())
: Collections.emptyList())
.build();
}
}
在其他情况下,我使用这样的注释:@Mapping(target = "advisor.id", source = "advisorId")
从 id
创建对象。它在 parent 包含一个实例的情况下起作用。但是 User
和 UserFilter
有 List<Role>
作为字段。
如何用注释替换default
方法?
从我在你的例子中看到的,我假设你也可以在这种情况下使用注释:只需创建一个方法来映射 RoleId
和 Role
并且 Mapstruct 将实现这个方法并在尝试映射这些模型的集合时自动调用它的方法:
@Mapping(source = "id", target = "id")
Role mapRoleIdToRole(RoleId roleId);