首页 > 解决方案 > @RequestBody 应该用 Spring Webflux 中的 Mono Publisher 包装吗?

问题描述

我正在研究 Spring-Webflux,我只是想知道我是否也应该用 Mono Publisher 包装我的 @RequestBody 对象?

例如: @RequestBody Mono<SavePriceViewModel> saveModel

例子:

@PostMapping("/item")
public Mono<ResponseEntity<PriceViewModel>> createHeaderAndItem(@RequestBody Mono<SavePriceViewModel> saveModel) {
   return service.createHeaderAndItem(saveModel).doOnSuccess(r -> log.debug("createHeaderAndItem() returned."));
}

标签: javaspring-webfluxreactive

解决方案


请求正文不必是单声道的,我们可以返回一个Mono<ResponseModel>不需要的 ResponseEntity

@PostMapping("/item")
public Mono<PriceViewModel> createHeaderAndItem(@RequestBody SavePriceViewModel saveModel) {
   return service.createHeaderAndItem(saveModel).doOnSuccess(r -> log.debug("createHeaderAndItem() returned."));
}

有关序列化和反序列化的更多信息,请查看此。 https://docs.spring.io/spring/docs/5.1.9.RELEASE/spring-framework-reference/web-reactive.html#webflux-codecs

当解码到一个多值发布者(例如 Flux)时,一旦为一个完整的对象接收到足够的字节,每个 TokenBuffer 就会被传递给 ObjectMapper。输入内容可以是 JSON 数组,如果内容类型为 ,则可以是行分隔的 JSON "application/stream+json"


推荐阅读