此文档说明:https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html
ServerResponse提供对HTTP响应的访问。由于它是不可变的,因此您可以使用构建器创建ServerResponse。构建器允许您设置响应状态,添加响应标头和提供正文。例如,这是如何创建具有200 OK状态,JSON内容类型和正文的响应:
Mono<Person> person = ...
ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body(person);
同样,我厌倦了将Mono<T>
传递给ServerReponse Builder的body方法,但是我收到了以下错误:
代码段:
编译错误:
Mono<Inventory> inventoryMono=request.bodyToMono(Inventory.class);
return ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body(inventoryMono);
但是它适用于以下代码:
ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body(inventoryMono.doOnNext(inventoryRepository::save).log(),Inventory.class)
我错过了什么?
答案 0 :(得分:0)
我确定这是文档的问题,因为ServerResponse.BodyBuilder并不包含此类方法。只有一个名为 body 的单参数方法,它采用BodyInserter,所以你必须将Mono转换为BodyInserter(例如使用BodyInserters.fromObject)。
答案 1 :(得分:0)
您的情况可以根据documentation来解释。由于您尝试返回Mono
(继承自Publisher
类),因此必须将该类指定为body方法中的第二个参数,如下所示。
.body(inventoryMono, Inventory.class)
在您的第二个代码段中,您将Inventory.class
作为第二个参数,这就是它的工作原理。只需将其添加到您的第一个代码段