【发布时间】:2023-03-03 01:02:01
【问题描述】:
我正在使用 MapStruct 来制作 dto <-> entity 映射。相同的映射器用于从 dto创建 和 更新实体。对 dto 的 id 进行了验证,以了解是否必须创建新实体 (id == null) 或者应该从数据库中检索它 (id != null)。
我实际上使用MapperDecorator 作为解决方法。示例:
映射器
@Mapper
@DecoratedWith(UserAccountDecorator.class)
public interface UserAccountMapper {
UserAccountDto map(User user);
User map(UserAccountDto dto);
User map(UserAccountDto dto, @MappingTarget User user);
}
装饰器
public abstract class UserAccountDecorator implements UserAccountMapper {
@Autowired
@Qualifier("delegate")
private UserAccountMapper delegate;
@Autowired
private UserRepository userRepository;
@Override
public User map(UserAccountDto dto) {
if (dto == null) {
return null;
}
User user = new User();
if (dto.getId() != null) {
user = userRepository.findOne(dto.getId());
}
return delegate.map(dto, user);
}
}
但是由于必须为每个映射器创建一个装饰器,这个解决方案变得很繁重。
有没有什么好的解决方案可以做到这一点?
我正在使用:
- MapStruct:1.1.0
【问题讨论】:
标签: java mapping data-transfer-objects mapstruct