Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 缺少Spring响应式Web应用程序请求后正文_Java_Spring_Spring Webflux_Project Reactor - Fatal编程技术网

Java 缺少Spring响应式Web应用程序请求后正文

Java 缺少Spring响应式Web应用程序请求后正文,java,spring,spring-webflux,project-reactor,Java,Spring,Spring Webflux,Project Reactor,我正在进行一个小型测试项目,以检查Spring反应式Web应用程序如何与MongoDB一起实际工作 我从一开始就遵循手册 它说明我可以在控制器中处理POST请求,如: @PostMapping("/person") Mono<Void> create(@RequestBody Publisher<Person> personStream) { return this.repository.save(personStream).then();

我正在进行一个小型测试项目,以检查Spring反应式Web应用程序如何与MongoDB一起实际工作

我从一开始就遵循手册

它说明我可以在控制器中处理POST请求,如:

@PostMapping("/person")
    Mono<Void> create(@RequestBody Publisher<Person> personStream) {
        return this.repository.save(personStream).then();
    }
现在我看到订阅后调用了onError方法。可丢弃的状态体丢失:

此处为错误字符串:
缺少请求正文:reactor.core.publisher.Mono.com.springreactive.poc.controller.BanquetHallController.create(org.reactivestreams.publisher)
为什么请求正文为空?

同样值得一提的是:正如我对所有这些反应式的东西所知,在不手动实现订阅服务器的情况下调试发布服务器/订阅服务器是否是更好的方法

更新我更新了POST处理程序方法描述,并将请求正文作为字符串对象传递:

Mono<Void> create(@RequestBody String banquetHallStream)
Mono-create(@RequestBody-String-banquetHallStream)

那么这不是一种“反应”,对吗?字符串不是被动的,Publisher应该是…

我遇到了完全相同的问题,并且能够通过将
@ResponseStatus
放在方法上解决它。下面是method controller的外观:

@ResponseStatus(HttpStatus.CREATED)
@PostMapping(value = "/bulk", consumes = APPLICATION_STREAM_JSON_VALUE)
public Mono<Void> bulkInsert(@RequestBody Flux<Quote> quotes) {
    return quoteReactiveRepository.insert(quotes).then();
}

测试使用:
org.springframework.boot:springbootstarterwebflux:2.1.0.RELEASE

我使用了postman而不是CURL,它对我来说很好。下面是导出的curl命令curl-X POST-H'Cache Control:no Cache'-H'Content Type:application/json'-d'{“name”:“test”}'我完全尝试了您的命令,但也出现了相同的错误。我还尝试将构造函数和getter/setter放在同一个问题的模型中。可能是我对如何启动应用程序的理解有误吗。我从STS(Eclipse)开始,在project-RunasSpringBoot应用程序上按右键。不确定在这种情况下它使用的是什么服务器。我不得不降级到2.04版本。发布版本不确定这是否会造成不同ID您更改了其他任何内容,比如BanquetHall类?我使用的是java 8,而不是9。
Subscriber s = new Subscriber() {
    @Override
    public void onSubscribe(Subscription s) {
        logger.info("Argument: "+s.toString());
    }
    @Override
    public void onNext(Object t) {
        logger.info("Argument: "+t.toString());

    }
    @Override
    public void onError(Throwable t) {
        logger.info("Argument: "+t.toString());
    }
    @Override
    public void onComplete() {
        logger.info("Complete! ");
    }
};
banquetHallStream.subscribe(s);
Here error string:
Request body is missing: reactor.core.publisher.Mono<java.lang.Void> com.springreactive.poc.controller.BanquetHallController.create(org.reactivestreams.Publisher<com.springreactive.poc.domain.BanquetHall>)
Mono<Void> create(@RequestBody String banquetHallStream)
@ResponseStatus(HttpStatus.CREATED)
@PostMapping(value = "/bulk", consumes = APPLICATION_STREAM_JSON_VALUE)
public Mono<Void> bulkInsert(@RequestBody Flux<Quote> quotes) {
    return quoteReactiveRepository.insert(quotes).then();
}
webClient.post()
        .uri("/quotes/bulk")
        .contentType(MediaType.APPLICATION_STREAM_JSON)
        .body(flux(), Quote.class)
        .retrieve()
        .bodyToMono(Void.class).block();