WebFlux/Project Reactor

WebFlux/Project Reactor
S9
  • Rejestracja:około 13 lat
  • Ostatnio:8 miesięcy
  • Postów:415
0

Załóżmy, że mam metodę:

Kopiuj
 public Mono<?> registration(@RequestBody RegistrationRequest registrationRequest){
            Mono<User> register = registrationService.register(registrationRequest);
            return register;
    }

Jak teraz zalogować do konsoli info, że user został zapisany ? Próbowałem coś takiego:

register.subscribe(v -> logger.info("Saved: " + v.toString()));

Ale nic się nie dzieje. block() na register też wywołać nie mogę, bo leci java.lang.IllegalStateException: block()/blockFirst()/blockLast() are blocking, which is not supported in thread reactor-http-nio-2. Proszę o pomoc.

jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:8 minut
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4708
0

użyj doOnNext( .... )


jeden i pół terabajta powinno wystarczyć każdemu
S9
  • Rejestracja:około 13 lat
  • Ostatnio:8 miesięcy
  • Postów:415
0

Dalej pusto w konsoli.

jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:8 minut
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4708
0

Pokaż jakeś to zrobił.


jeden i pół terabajta powinno wystarczyć każdemu
S9
  • Rejestracja:około 13 lat
  • Ostatnio:8 miesięcy
  • Postów:415
0

@jarekr000000:

Kopiuj
 public Mono<?> registration(@RequestBody RegistrationRequest registrationRequest){
       logger.info(" Registration request:  " + registrationRequest);

       Mono<User> register = registrationService.registerUser(registrationRequest);
       register.doOnNext(v -> logger.info("saved:" + v.getName()));
       return register;
    }

jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:8 minut
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4708
0

@slayer9:
No to słabo:

Zobacz to:

Kopiuj
  public Mono<?> registration(@RequestBody RegistrationRequest registrationRequest){
        logger.info(" Registration request:  " + registrationRequest);
         return registrationService.registerUser(registrationRequest)
                         .doOnNext(v -> logger.info("saved:" + v.getName()));
     }
 

I zrozum dlaczego twoje nie może działać.

Thinking in values.


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 3x, ostatnio: jarekr000000
S9
Nie wiem czemu moje nie może działać, ale Twoje działa, thx.
jarekr000000
Twoje, nie może działać, bo ta linijka nic nie robi: register.doOnNext(v -> logger.info("saved:" + v.getName()));. doOnNext - zwraca nowy strumień, który powinienś zwrócić w return. A ty tam używasz register, który jest niezmieniony. doOnNext nie mutuje!
jarekr000000
Podobny problem ja zrobienie BigDecimal::add(...) i nie podstawienie wyniku.
S9
Już rozumiem dzięki. ; ) Zobrazowałem to sobie mniej więcej w ten sposób: piszę np mojalista.map(v -> v.getName); i oczekuję wyniku, mimo, że nic nie ma prawa się stać.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.