3

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

我以 Uni> 的身份发送回复部分成功

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

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

@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);
}

响应中的“员工”为空。

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

请帮忙。

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

谢谢你的帮助。

4

1 回答 1

4

你不能混淆两种方法。您需要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

于 2020-05-16T08:39:14.560 回答