Сопоставить поле Mono с методом цепочки - PullRequest
0 голосов
/ 27 мая 2019

Я относительно новичок в программировании Spring WebFlux и Reactive вообще, поэтому прошу прощения за мой вопрос, это не имеет никакого смысла.

У меня есть простой метод @PostMapping, который я пытаюсь сопоставить поле в Mono с другим методом цепочки, таким образом:

   @PostMapping
   public Mono<Delay> getPlanetNames(@RequestBody Mono<Delay> delayBody) {
      return delayBody
          .map(p -> new Delay(p.getDelayTime(), getRandomPlanetName()))
          .delayElement(Duration.ofMillis(50));
   }

    public String getRandomPlanetName() {
        Random rand = new Random();
        List<String> list = Stream.of(
                "Mercury",
                "Neptune")
                .collect(Collectors.toList());
        return list.get(rand.nextInt(list.size()));
    }

По сути, я хочу, чтобы вернутьновое имя планеты с помощью «getRandomPlanetName ()» и в то же время установка «delayElement» с полем в объекте «Задержка».Примерно так:

   @PostMapping
   public Mono<Delay> getPlanetNames(@RequestBody Mono<Delay> delayBody) {
      return delayBody
          .map(p -> new Delay(p.getDelayTime(), getRandomPlanetName()))
          .delayElement(Duration.ofMillis(delayBody.getDelayTime));
   }

Кроме того, могу ли я вернуть только String, которая является результатом getPlanetName () вместо Mono объекта?

1 Ответ

0 голосов
/ 27 мая 2019

В основном это смотрит на Mono<Delay> время задержки и создает еще Mono с этим delayElement(delayTime).

@PostMapping
public Mono<String> getPlanetNames(@RequestBody Mono<Delay> delayBody) {
  return delayBody.flatMap(p -> {
    return Mono.just(getRandomPlanetName())
        .delayElement(Duration.ofMillis(p.getDelayTime()));
  });
}

private String getRandomPlanetName() {
  Random rand = new Random();
  List<String> list = Arrays.asList("Mercury", "Neptune");
  return list.get(rand.nextInt(list.size()));
}

для лучшей читабельности, которую я положил в {}, вы можететакже просто напишите это:

@PostMapping
public Mono<String> getPlanetNames(@RequestBody Mono<Delay> delayBody) {
  return delayBody.flatMap(p -> Mono.just(getRandomPlanetName()).delayElement(Duration.ofMillis(p.getDelayTime())));
}
...