5

我正在尝试使用 Spring Webflux 创建一个简单的 CRUD 示例,但我陷入了一些概念。

我知道我可以在我的控制器请求映射方法中返回一个 Flux。但有时我想返回一个 404 状态,所以我可以在前端以某种方式处理。

我在官方文档中找到了一个使用 ServerResponse 对象的示例:

        public Mono<ServerResponse> listPeople(ServerRequest request) { 
                Flux<Person> people = repository.allPeople();
                return ServerResponse.ok().contentType(APPLICATION_JSON).body(people, Person.class);
        }

如您所见,即使返回的是一个列表 (Flux) o people, ServerResponse.ok.body 也会创建一个 Mono。

所以我的问题是:是这样吗?换句话说,我有没有 Flux 没关系,Spring 总是返回一个ServerResponse 的Mono(或其他类似的类)吗?

对于我的 404 状态,我可以使用类似的东西

.switchIfEmpty(ServerResponse.notFound().build());

但我正在以更流畅的方式思考。例如,我可以逐个元素地处理对象列表。

4

1 回答 1

2

我认为您需要功能collectList()flatMap(). 像这样:

public Mono<ServerResponse> listPeople(ServerRequest request) { 
                Flux<Person> people = repository.allPeople();
                return people.collectList().flatMap(p->
                    p.size() < 1 ?
                        ServerResponse.status(404).build()
                       :ServerResponse.ok().contentType(APPLICATION_JSON).body(fromObject(p))
                ); 
        }
于 2019-09-11T11:22:38.720 回答