如果我们在Spring中使用React式方法,我们可以在方法中返回Flux/Mono类型。因此,在控制器中,最好 Package 响应ResponseEntity并返回它,如果端点返回一个对象,我们可以在React式中编写下一个代码:
@GetMapping(value = "/to-do/{toDoId}", produces = {
MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE, MediaType.TEXT_XML_VALUE})
public Mono<ResponseEntity<ToDo>> getToDo(@Valid @PathVariable Long toDoId) {
return repository.findById(toDoId)
.map(ResponseEntity::ok);
}
但是如果我们想要返回通量呢?经过一些实验,我找到了这个解决方案:
@GetMapping(value = "/to-do", produces = {
MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE, MediaType.TEXT_XML_VALUE})
public ResponseEntity<Flux<ToDo>> getToDos() {
return ResponseEntity.ok().body(
repository.findAll()
);
}
但是如果我这里理解正确的话,这种格式的ResponseEntity<Flux<ToDo>>
这样的响应是阻塞的?所以还是做<Flux<ResponseEntity<ToDo>>
这样的比较好?如果是这样的话,怎么得到呢?我应该订阅吗?
2条答案
按热度按时间s5a0g9ez1#
看起来你并没有真正使用
ResponseEntity
来自定义响应状态,所以,为什么不只是返回单色或通量?在任何情况下,根据文档,返回ResponseEntity和ResponseEntity都是非常好的,两者都将提供异步的、非阻塞的响应:
ResponseEntity 或ResponseEntity使响应状态和头立即已知,而主体在稍后异步提供。如果主体由0..1个值组成,则使用Mono;如果主体可以生成多个值,则使用Flux。
d7v8vwbk2#
有多种方法可以使用
ResponseEntity
从无功控制器返回值:出版商可以是Mono或Flux
ResponseEntity<Publisher<T>>
-这使得响应状态和头部立即已知,而主体在稍后的某个时间点异步提供。Publisher<ResponseEntity<T>>
-这提供了所有三个:响应状态、头和主体,在稍后的某个时间点异步处理。它允许头和响应状态根据异步处理的结果而变化。也可以使用以下结构,但不太常见:
Mono<ResponseEntity<Publisher<T>>>
-首先异步提供响应状态和头部,然后异步提供响应主体