MapStruct集列表为字段

问题描述 投票:0回答:1

我正在使用带有Lombok的Map Struct与DTO和实体进行来回映射,但发生在一个案例上:

@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创建对象。父级包含一个实例的工作方式。但是UserUserFilter具有List<Role>作为字段。

如何用注释替换default方法?

java lombok mapstruct
1个回答
0
投票

从我在您的示例中看到的,我假设您可以在这种情况下很好地使用批注,只需创建一个在RoleId和Role之间进行映射的方法,Mapstruct就会自动调用此方法:

@Mapping(source = "id", target = "id")
default Role mapRoleIdToRole(RoleId roleId);
© www.soinside.com 2019 - 2024. All rights reserved.