Java 缺少Spring响应式Web应用程序请求后正文
我正在进行一个小型测试项目,以检查Spring反应式Web应用程序如何与MongoDB一起实际工作 我从一开始就遵循手册 它说明我可以在控制器中处理POST请求,如: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();
@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();