当前位置: 首页 > 知识库问答 >
问题:

使用spring webflux-reactor的嵌套数据访问调用

费凯康
2023-03-14

我试图使用spring WebFlux/Reactor对数据库进行嵌套调用,以返回一个嵌套对象(一个用户和他的角色)。

场景如下:

    null

上面的场景必须在没有阻塞的情况下完成(我知道映射是一个很小的阻塞:))。

public Mono<User> retrieveByUsername(String username)  {
    return databaseClient.execute(usersQueries.getProperty("users.select.by.username"))
            .bind("username", username.toLowerCase())
            .map((row, meta) -> UserRowMapper.mapRow(row, meta))
            // here goes nested database query to retrieve roles and set them to retrieved user 
            // and return Mono<User>
            .one();
}

提前感谢您的帮助。

共有1个答案

澹台庆
2023-03-14

以下是我如何看待你的问题的解决方案:

public Mono<User> retrieveByUsername(String username) {
    Mono<User> userMono = databaseClient
            .execute(usersQueries.getProperty("users.select.by.username"))
            .<User>map((row, meta) -> UserRowMapper.mapRow(row, meta))
            .one()
            .cache();

    Flux<Role> roles = Mono
            .from(userMono)
            .flatMapMany(user -> databaseClient
                    .execute(usersQueries.getProperty("roles.select.by.user.id"))
                    .bind("userId", user.getId())
                    .<Role>map((row, meta) -> RoleRowMapper.mapRow(row, meta))
                    .all()
            );

    return Mono
            .from(userMono)
            .flatMap(user -> roles
                    .collectList()
                    .map(r -> {
                        user.setRoles(r);
                        return user;
                    })
            );
}
 类似资料:
  • 我试图解析一个OpenAPI JSON文件,并访问值来构建一个rest模型类。我尝试使用对象映射器解析JSON文件,并将其发送到一个接收

  • 问题内容: 我正在尝试使用zippopotam.us获取特定城市的邮政编码。我有下面的代码可以正常工作,但是当我尝试访问返回的密钥时 完整的JSON输出: 谢谢你的帮助。 问题答案: 我没有意识到第一个嵌套元素实际上是一个数组。正确访问邮政编码密钥的方法如下:

  • 问题内容: 我正在尝试使用angular.js,hammer.js和topcoat制作和移动webapp。 我在显示像这样的Json文件中的数据时遇到了一些麻烦: 我的js文件是这样的: 我的HTML文件是这样的: 我想显示所有专辑,并且如果我的用户选择特定的艺术家,我想过滤那些专辑。 这里的问题是如何在此嵌套json上进行选择。顺便说一句,artist.name显示正确。 第二个问题是,如何过滤

  • 问题内容: 为什么以下SQL语句不起作用? 它产生此错误: 查询输入必须至少包含一个表或查询。 单个语句有效。 问题答案: Access SQL语句不会让您对以下其中一项使用子查询 按照Piotr的建议,切换到语句即可。 或者,您可以在语句中使用Access Domain Aggregate函数而不是子查询:

  • 我有以下HTML代码的网页: 我试过这个。WebDriverWait(驱动程序,10).Unilt(ec.frame_to_available_and_switch_to_it((by.css_selector,“iframe.iframetgr”)))WebDriverWait(驱动程序,10).Unilt(ec.frame_to_available_and_switch_to_it((by.n

  • 问题内容: 假设我有json数据,例如 现在我正在从该json数据访问字段,例如: 如何以最有效的方式从给定的json数据访问第三个字段()? 不起作用 一种可能是我使用for循环构造字符串,然后进行eval评估,但是有没有有效的方法呢? 问题答案: 老实说,我无法理解您的问题。JSON已经结构化了,为什么需要更改结构? 在您的情况下,我将按以下方式访问它: 如果碰巧希望 遍历 数据,则需要: 更