Должен ли @RequestBody быть упакован с Mono Publisher в Spring Webflux? - PullRequest
1 голос
/ 22 сентября 2019

Я изучаю Spring-Webflux и мне просто интересно, должен ли я также обернуть свой объект @RequestBody в Mono Publisher?

Например: @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."));
}

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

Тело запроса не обязательно должно быть моно, и мы можем вернуть 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".

0 голосов
/ 25 сентября 2019

Отлично.Я понимаю немного о Flux.Но потом я хотел бы вернуться в Моно снова.@Raghu Каково Ваше мнение по этому поводу?

@ResponseStatus(HttpStatus.CREATED)
public Mono<Taco> postTaco(@RequestBody Mono<Taco> tacoMono) {
  return tacoRepo.saveAll(tacoMono).next();
}

Принимая Моно в качестве входных данных, метод немедленно вызывается, не дожидаясь Taco быть решены из тела запроса.И поскольку хранилище также является реактивным, оно примет Mono и немедленно вернет Flux, из которого вы вызываете next (), и вернет получившееся Mono ... все до того, как запрос будет обработан!

DoВы думаете, что я все еще могу опустить упаковку @RequestBody с Mono?

...