为了账号安全,请及时绑定邮箱和手机立即绑定

Reactor:如何将实体 Flux 转换为 DTO 对象 Flux

Reactor:如何将实体 Flux 转换为 DTO 对象 Flux

婷婷同学_ 2024-01-28 16:20:38
我有一个用户实体和一个角色实体。除了用户实体有一个对应于其各自角色的 id 的 role_id 字段之外,这些字段并不重要。由于 Spring Data R2DBC 不在实体之间建立任何形式的关系,因此我转向 DTO 方法。我对 R2DBC 和反应式编程作为一个整体非常陌生,我一生都无法弄清楚如何转换Flux<User>我的存储库的 findAll() 方法将我返回到Flux<UserDto>. 我的 UserDto 类非常简单:@Data@RequiredArgsConstructorpublic class UserDto {    private final User user;    private final Role role;}这是我想要制作的 UserMapper 类:@Service@RequiredArgsConstructorpublic class UserMapper {    private final RoleRepository roleRepo;    public Flux<UserDto> map(Flux<User> users)    {        //???    }}如何让这个映射器将 a 转换Flux<User>为Flux<UserDto>包含用户各自角色的 a ?
查看完整描述

2 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

假设您RoleRepository有一个findById()方法或类似的方法来查找Role给定的 ID,并且您的用户对象有一个getRoleId(),您可以通过标准地图调用来完成此操作:

return users.map(u -> new UserDto(u, roleRepo.findById(u.getRoleId())));

findById()或者在返回 a的情况下Mono

return users.flatMap(u -> roleRepo.findById(u.getRoleId()).map(r -> new UserDto(u, r)));

如果可能返回 null,您当然可能想要添加额外的检查getRoleId()


查看完整回答
反对 回复 2024-01-28
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

将数据从业务对象转换为数据库对象:


private static UserDAO covertUserBOToBUserDAO(UserBO userBO){

    return new UserDAO(userBO.getUserId(), userBO.getName(), userBO.getMobileNumber(), 

     userBO.getEmailId(), userBO.getPassword());

}

将数据从数据库对象转换为业务对象:


private static Mono<UserBO> covertUserDAOToBUserBO(UserDAO userDAO){

    return Mono.just(new UserBO(userDAO.getUserId(), userDAO.getName(), 

     userDAO.getMobileNumber(), userDAO.getEmailId(), userDAO.getPassword()));

}

现在异步服务(getAllUsers):


public Flux<UserBO> getAllUsers(){

        return userRepository.findAll().flatMap(UserService::covertUserDAOToBUserBO);

}

由于 flatMap 是异步的,因此我们可以从异步操作中受益,甚至可以将对象从 DAO 转换为 BO。


同样,如果保存数据,那么我尝试如下:


public Mono<UserBO> saveUser(UserBO userBO)

{

        return 

 userRepository.save(covertUserBOToBUserDAO(userBO)).flatMap(UserService::covertUserDAOToBUserBO);

}


查看完整回答
反对 回复 2024-01-28
  • 2 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信