rest - 使用 io.smallrye.mutiny.Uni 创建响应对象

标签 rest quarkus smallrye-reactive-messaging

我正在尝试学习在 Quarkus 框架上使用 ReactiveMongoClient。

我以 Uni 发送响应部分成功>

@GET
@Path("/unpaginated")
public Uni<List<Staff>> unpaginatedStaffList() {
    return staffService.getStaffResponse();
}

但是,当我尝试获取某个其他类 (StaffResponse) 的对象以包含用于分页的 Link 对象时,我没有获得任何员工记录。 (现在我已经硬编码了分页链接)

@GET
@Path("/paginated")
public StaffResponse paginatedStaffList() {
    List<Link> links = LinkService.getLinks("/staff?page=2&limit=20", "next");
    Uni<List<Staff>> staff = (Uni<List<Staff>>) staffService.getStaffResponse();
    return new StaffResponse(links, staff);
}

“staff”在响应中为空。

MongoClient 正在返回 Staff 列表,看起来 Response 对象没有获取列表。 尝试阅读 SmallRye Mutiny 文档 - 无法解决。

请帮忙。

我已提交代码:https://github.com/doepradhan/staffApi 和一个示例 json 数据文件 ( https://github.com/doepradhan/staffApi/blob/master/sample-staff-data.json )

非常感谢您的热心帮助。

最佳答案

您不能混淆两种方法。您需要使用 Uni作为端点的输出。这意味着您需要将两个输入源都转换为 Uni,将它们合并,然后映射到 StaffResponse。 .

  1. 转换LinkService返回 Uni(或使用 Uni.createFrom().item(links))
  2. 将 StaffResoponse 更改为仅使用简单对象:
public StaffResponse(List<Link> links, List<Staff> staff) {
        this.links = links;
        this.staff = staff;
    }
  1. 如前所述,获取两个 Uni 源并将它们组合在一起,您将得到 Uni<Tuple> ,然后将其映射到 StaffResponse :
    @GET
    @Path("/paginated")
    public Uni<StaffResponse> paginatedStaffList() {
        final Uni<List<Link>> links =
                Uni.createFrom().item(LinkService.getLinks("/staff?page=2&limit=20", "next"));
        Uni<List<Staff>> staff = staffService.getStaffResponse();
        return staff.and(links).map(it -> new StaffResponse(it.getItem2(), it.getItem1()));
    }

我创建了一个有效的 PR here

关于rest - 使用 io.smallrye.mutiny.Uni 创建响应对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61832307/

相关文章:

database - Grails 2.5.0-重置数据库以使用测试数据

java - 如何将 react 流连接到 quarkus/smallrye 中的 AMQP 代理

unit-testing - 无法使用 OIDC Auth 服务器进行单元测试?

java - 2个表之间的Quarkus/Hibernate关系

quarkus - Panache 响应式(Reactive)事务超时,没有堆栈跟踪

quarkus - 重新启动 Reactive Messaging,例如重新配置后

java - Spring Rest 编码的最佳实践是什么?基于 API 和基于名称的 API

java - 是否有适用于 Android 的最佳 API 客户端模式?

web-services - GWT 富 Internet 应用程序 (RIA) 和 REST HATEOAS - 它们的兼容性如何?

java - Uni<Void> 如何在 REST 调用中获得失败或成功响应