spring webflux:如何使用正文插入器在响应体中发送Mono <t>

时间:2017-12-24 15:14:42

标签: spring spring-boot spring-webflux

此文档说明: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方法,但是我收到了以下错误:

enter image description here

代码段:

编译错误

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)

我错过了什么?

2 个答案:

答案 0 :(得分:0)

我确定这是文档的问题,因为ServerResponse.BodyBuilder并不包含此类方法。只有一个名为 body 的单参数方法,它采用BodyInserter,所以你必须将Mono转换为BodyInserter(例如使用BodyInserters.fromObject)。

答案 1 :(得分:0)

您的情况可以根据documentation来解释。由于您尝试返回Mono(继承自Publisher类),因此必须将该类指定为body方法中的第二个参数,如下所示。

.body(inventoryMono, Inventory.class)

在您的第二个代码段中,您将Inventory.class作为第二个参数,这就是它的工作原理。只需将其添加到您的第一个代码段

即可