当前位置: 首页 > 知识库问答 >
问题:

quarkus Multi不引用字符串

祖波光
2023-03-14

背景:我刚刚开始使用Quarkus,正在经历https://quarkus.io/guides/resteasy-reactive

我定义了以下endpoint:

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

基本服务的细节不是特别相关,我不认为;它产生一个“hello{name}-{idx}”流

我在返回的超文本传输协议响应中看到的是未引用的字符串(无效的json):

curl http://localhost:8080/hello/greeting/neo/4/1

[hello neo - 0,hello neo - 1,hello neo - 2,hello neo - 3]

我试着更换pom。xml依赖于quarkus resteasy reactivequarkus resteasy reactive jackson,但效果相同(我相信是因为String已经在这里注册了:https://quarkus.io/guides/resteasy-reactive#resource-类型)。

有什么安全的方法吗?或者只是将Multi转换为List,以便jackson可以正确地序列化它?

我将注意到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结束。


共有1个答案

寿翰飞
2023-03-14

如评论中所述,这是一个开放性缺陷:https://github.com/quarkusio/quarkus/issues/18043结束。

 类似资料:
  • 问题内容: 我知道可以在Java字符串中用双引号将符号放在双引号之前。但是,如果在字符串中经常使用双引号,那么是否有一种方法可以将字符串标记一次,因此不需要在每个双引号之前写上符号吗?(就像在C#中一样,可以将符号放在字符串之前)示例: 代替 问题答案: 你不能 但是,如果您懒得不能使用双引号,则可以使用一些技巧。例如: 输出:

  • 问题内容: 在我的应用程序中,我将经常传递对静态字符串的引用。我希望避免让Go为每个调用分配内存,但是我无法将地址获取到字符串文字。 为什么不能采用字符串文字的地址(请参见下面的示例)?我是否误解了语法,还是由于Go的内部运作而受到限制? 如果不可能的话,最好的解决方案是什么? 可以,但是每次都会分配内存吗? 不会分配任何新的内存,但我希望避免该函数之外的混乱情况。 感谢帮助! 问题答案: 接受文

  • 问题内容: 我需要在逗号处将字符串输入分解为数组。但是,字符串在引号内包含逗号。 输入: 返回$ linemysql为: 我如何才能做到这一点,而爆炸会忽略引号内的逗号? 问题答案: 由于您使用的是逗号分隔的值,因此可以使用。 将返回:

  • 我在解析antlr4中的格式行列表时遇到了一个问题 但这是失败的第一个字符识别'*'本身,这使我困惑。 第1行:0不匹配的输入'*这是一个字符串',应为'*'

  • 为什么在下面的代码中,str1==str2返回false,而str2==str3返回true?根据我的理解,str1==str2也应该返回true。

  • 如果d是任何其他容器(set、list、tuple...)包含x,则输出true。只有在dict中,它才会打印false。此外,x是键还是值,或者像上面一样,两者都是,这并不重要。 我认为在Python中,每个对象都是引用(与Java不同,Java有基元类型,而Ruby有值类型小int),但现在看来,str和int是一些基元类型,没有被引用。但另一方面,为什么只在小纸条上?? 我还知道从-5到25