首页 > 解决方案 > 如何根据 Flux 对象是否有元素在 webflux 中返回不同的响应?

问题描述

我知道 Flux 对象上有一个名为“hasElements”的函数。但它的行为有点奇怪!</p>

Flux<RoomBO> rooms=serverRequest.bodyToMono(PageBO.class).flatMapMany(roomRepository::getRooms);
return rooms.hasElements().flatMap(aBool -> aBool?ServerResponse.ok().body(rooms,RoomBO.class):ServerResponse.badRequest().build());
return ServerResponse.ok().body(rooms,RoomBO.class)

当flux对象不为空时,第二个return语句可以返回我需要的正确的东西,但是第一个return语句只返回一个空数组,类似于json中的“[]”。我不知道为什么会发生这种情况!我使用相同的数据进行测试。唯一的区别是我在第一种情况下调用了hasElements函数。但是我需要在flux对象为空时返回badRequest。hasElements 函数似乎使我的通量对象为空,尽管我知道它实际上并没有这样做。

标签: fluxreactorwebflux

解决方案


好吧,最后我决定调用 switchIfEmpty(Mono.error()) 来抛出一个错误,然后我全局处理特殊错误(有时不适合使用 onErrorReturn 或 onErrorResume)。我认为这样可以避免遇到大数据时在内存中的收集操作。但它仍然不是一个好的解决方案,因为全局错误处理程序可能难以维护。我希望有人能提供更好的解决方案。


推荐阅读