Подписка на тело запроса, не излучающее значения в Spring Reactive - PullRequest
0 голосов
/ 29 апреля 2020

Я боролся с этим уже два дня и, наконец, зашел в тупик.

Дело в том, что я обрабатываю запрос вот так:

public Mono<ServerResponse> jsonBodyDemo(ServerRequest request) {  

    request.bodyToMono(DemoDTO.class).log().subscribe(
        d -> System.out.println(d.getName()),
        e -> System.out.println("error"));

    return ServerResponse.ok().body(BodyInserters.fromValue("OK"));
}

И имя никогда не регистрируется. Все, что я получаю, это:

2020-04-29 14:46:39.210  INFO 20404 --- [ctor-http-nio-3] reactor.Mono.OnErrorResume.1             : onSubscribe(FluxOnErrorResume.ResumeSubscriber)
2020-04-29 14:46:39.210  INFO 20404 --- [ctor-http-nio-3] reactor.Mono.OnErrorResume.1             : request(unbounded)

Но фактическое onNext никогда не происходит

Любое предложение о том, что мне не хватает?

1 Ответ

0 голосов
/ 30 апреля 2020

Вы почти никогда не должны подписываться в приложении webflux. Ваша служба является производителем, а инициатором вызова является абонент (вызывающий клиент)

public Mono<ServerResponse> jsonBodyDemo(ServerRequest request) {  
    return request.bodyToMono(DemoDTO.class)
             .flatMap(dto -> {
                 System.out.println(dto.getName());
                 return ServerResponse.ok().body(BodyInserters.fromValue("OK"));
             });
}

Когда вы подписываетесь, вы разрываете цепочку, рассматриваете все как поток, в котором все должно быть подключено .

...