Предыстория: я только начинаю работать с 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]
Я попытался заменить pom.xml
зависимость quarkus-resteasy-reactive
на quarkus-resteasy-reactive-jackson
, но с тем же эффектом (я думаю, потому что String
уже зарегистрирован здесь: https://quarkus.io/guides/resteasy -reactive#resource-types ).
Есть ли безопасный способ сделать это? Или идея просто преобразовать Multi
в List
, чтобы Джексон мог правильно сериализовать его?
Отмечу, что пример, приведенный на https://quarkus.io/guides/getting-started-reactive (официальные документы), показывает цитируемый ответ:
$ curl http://localhost:8080/hello/greeting/3/neo
["hello neo - 0", "hello neo - 1", "hello neo - 2"]
Обновление
Это эффективно выполняет то, что я хочу, хотя я хочу подтвердить, что это не блокирует поток ввода-вывода:
@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 Закрытие.
Для этого существует открытая проблема: github.com/quarkusio/quarkus/issues/18043, которая, вероятно, скоро будет исправлена.
Гах, должно быть пропустил это. Спасибо @geoand.
Нет проблем, мы надеемся скоро исправить это для выпуска
2.0.x
.