背景:我刚刚开始使用 Quarkus,正在浏览https://quarkus.io/guides/resteasy-reactive
我定义了以下端点:
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/greeting/{name}/{count}/{delayInSeconds}")
public Multi<String> greetings(String name, long count, short delayInSeconds) {
return service.greetings(name, delayInSeconds, count);
}
我认为底层证券的细节service
并不是特别相关;它产生一个"hello {name} - {idx}"
.
我在返回的 http 响应中看到的是未加引号的字符串(无效的 json):
curl http://localhost:8080/hello/greeting/neo/4/1
[hello neo - 0,hello neo - 1,hello neo - 2,hello neo - 3]
我尝试替换 to 的依赖pom.xml
,但效果相同(我相信因为已经在这里注册:https ://quarkus.io/guides/resteasy-reactive#resource-types )。quarkus-resteasy-reactive
quarkus-resteasy-reactive-jackson
String
有没有一种安全的方法来做到这一点?或者只是将其转换Multi
为 aList
以便杰克逊可以正确序列化它的想法?
我会注意到https://quarkus.io/guides/getting-started-reactive(官方文档)中给出的示例显示了引用的响应:
$ curl http://localhost:8080/hello/greeting/3/neo
["hello neo - 0", "hello neo - 1", "hello neo - 2"]
更新
尽管我想确认它没有阻塞 i/o 线程,但这有效地完成了我想要的:
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/greeting/{name}/{count}/{delayInSeconds}")
// NOTE: conversion to `Uni<List` from `Multi`
public Uni<List<String>> greetings(String name, long count, short delayInSeconds) {
return service.greetings(name, delayInSeconds, count).collect().asList();
}
更新
如评论中所述,这是一个开放的错误:https ://github.com/quarkusio/quarkus/issues/18043 关闭。