【发布时间】:2020-05-14 23:02:03
【问题描述】:
我正在使用带有 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 创建对象。在 parent 包含一个实例的情况下工作。但是User 和UserFilter 有List<Role> 作为字段。
如何用注解替换default方法?
【问题讨论】:
-
龙目岛在这里的重要性是什么?这不只是一个
@Mapper的问题吗? -
@Bohemian,不是很大,只是为了记录 Lombok 在项目中的使用。
-
最好删除所有对 Lombok 的引用,因为它不相关并且会分散实际问题的注意力。 MCVE 也不错。