Как получить Flux <Bar>из Mono <JSONObject>в Spring Reactor API? - PullRequest
0 голосов
/ 22 октября 2018

У меня есть Mono<JSONObject> mono из службы API с ответом json, который выглядит следующим образом:

{  
  "total": 45,
  "results": [{"age": 23, "color": "blue"}, {"age": 34, "color": "orange"}]
}

и

import net.minidev.json.JSONObject;

, задокументированные в этой ссылке

Каждый элемент массива результатов в ответе json отображается на объект Bar.Я хочу получить

Flux<Bar> bars

сверху моно.

Я также хочу получить

int total сверху моно.

Как мне этого добиться?Я потерян здесь.

1 Ответ

0 голосов
/ 23 октября 2018

Следующее даст вам поток JSONObject, соответствующий классу Bar:

Flux<JSONObject> barsAsJsonObject = mono.flatMap(jsonObject -> jsonObject.get("results"))
        .flatMapMany(Flux::fromIterable);

Поскольку jsonObject.get("results") дает JSONArray, который расширяет ArrayList, мы можем использовать Mono.flatMapMany() для создания потока изэтогоСм. this и this .

После этого вы можете сопоставить объекты JSON с объектами Bar следующим образом, что даст вам поток Bar:

barsAsJsonObject.map( barAsJson -> {
//create Bar object here
})

Примените оператор count к потоку, чтобы получить количество объектов Bar.

Надеюсь, что ответ на ваш вопрос.

...