【发布时间】:2017-10-31 02:45:12
【问题描述】:
我正在尝试使用 Spring Webflux 创建一个简单的 CRUD 示例,但我在某些概念上卡住。
我知道我可以在我的控制器请求映射方法中返回一个 Flux。但有时我想返回一个 404 状态,所以我可以在前端以某种方式处理。
我在official documentation 中找到了一个使用ServerResponse 对象的示例:
public Mono<ServerResponse> listPeople(ServerRequest request) {
Flux<Person> people = repository.allPeople();
return ServerResponse.ok().contentType(APPLICATION_JSON).body(people, Person.class);
}
如您所见,即使返回的是列表 (Flux) o persons,ServerResponse.ok.body 也会创建一个 Mono。
所以我的问题是:是这样吗?换句话说,我有没有 Flux 没关系,Spring 是否总是返回一个 Mono 的 ServerResponse(或其他类似的类)?
对于我的 404 状态,我可以使用类似的东西
.switchIfEmpty(ServerResponse.notFound().build());
但我在考虑更多流媒体的方式。例如,我可以逐个元素地处理对象列表。
【问题讨论】:
-
ServerResponse始终是单个元素,因此是单声道,ServerResponse内部返回的内容可能是通量,这也是应该发生的。 -
@M.Deinum,感谢您的回答。但我不知道如何返回一些 http 状态。每个示例都使用 @GetMapping("/person") Flux
list() { return this.repository.findAll(); } 而不是通常的 ResponseEntity 对象,它可能包含一个状态。 -
@IgorVeloso 您的最新评论表明您正在使用 WebFlux 注释模型,但您的问题暗示了功能模型。您能否编辑您的问题以解释您想要实现的目标?
-
@BrianClozel,这是真正的问题,在我的问题中,我使用了官方 Spring 文档中的示例,但我想返回一个 Http 状态(比如说 404)。在我的评论中,我刚刚写了另一个我在网上找到的例子,但也没有 http 状态。抱歉,如果我不清楚,但正如我所说,也许我被一些核心概念所困。
-
@IgorVeloso 你要返回
Flux<ResponseEntity<Person>>吗?
标签: spring spring-mvc mono flux spring-webflux