1

背景:我刚刚开始使用 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-reactivequarkus-resteasy-reactive-jacksonString

有没有一种安全的方法来做到这一点?或者只是将其转换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 关闭。

4

1 回答 1

0

如评论中所述,这是一个开放的错误:https ://github.com/quarkusio/quarkus/issues/18043关闭。

于 2021-07-02T14:52:43.890 回答