使用 io.smallrye.mutiny.Uni 创建响应对象
Using io.smallrye.mutiny.Uni to create a response object
我正在尝试学习在 Quarkus 框架上使用 ReactiveMongoClient。
我以 Uni>
发送响应部分成功
@GET
@Path("/unpaginated")
public Uni<List<Staff>> unpaginatedStaffList() {
return staffService.getStaffResponse();
}
但是当我尝试获取其他 class (StaffResponse) 的对象以包含用于分页的 Link 对象时,我没有获得任何 Staff 记录。
(现在我已经硬编码 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 返回工作人员列表正常,看起来 Response 对象没有获取列表。
尝试阅读 SmallRye Mutiny 文档 - 无法解决。
请帮忙。
我已提交代码:https://github.com/doepradhan/staffApi
和示例 json 数据文件 (https://github.com/doepradhan/staffApi/blob/master/sample-staff-data.json)
非常感谢您的帮助。
您不能混淆两种方法。您需要使用 Uni
作为端点的输出。这意味着您需要将两个输入源都转换为 Uni,将它们合并,然后映射到 StaffResponse
.
- 将
LinkService
转换为 return Uni(或使用 Uni.createFrom().item(links))
- 将 StaffResoponse 更改为仅使用简单对象:
public StaffResponse(List<Link> links, List<Staff> staff) {
this.links = links;
this.staff = staff;
}
- 如前所述,获取两个 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
我正在尝试学习在 Quarkus 框架上使用 ReactiveMongoClient。
我以 Uni>
发送响应部分成功@GET
@Path("/unpaginated")
public Uni<List<Staff>> unpaginatedStaffList() {
return staffService.getStaffResponse();
}
但是当我尝试获取其他 class (StaffResponse) 的对象以包含用于分页的 Link 对象时,我没有获得任何 Staff 记录。 (现在我已经硬编码 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 返回工作人员列表正常,看起来 Response 对象没有获取列表。 尝试阅读 SmallRye Mutiny 文档 - 无法解决。
请帮忙。
我已提交代码:https://github.com/doepradhan/staffApi 和示例 json 数据文件 (https://github.com/doepradhan/staffApi/blob/master/sample-staff-data.json)
非常感谢您的帮助。
您不能混淆两种方法。您需要使用 Uni
作为端点的输出。这意味着您需要将两个输入源都转换为 Uni,将它们合并,然后映射到 StaffResponse
.
- 将
LinkService
转换为 return Uni(或使用 Uni.createFrom().item(links)) - 将 StaffResoponse 更改为仅使用简单对象:
public StaffResponse(List<Link> links, List<Staff> staff) {
this.links = links;
this.staff = staff;
}
- 如前所述,获取两个 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