flux - 如何根据 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 函数似乎使我的通量对象为空,尽管我知道它实际上并没有这样做。
解决方案
好吧,最后我决定调用 switchIfEmpty(Mono.error()) 来抛出一个错误,然后我全局处理特殊错误(有时不适合使用 onErrorReturn 或 onErrorResume)。我认为这样可以避免遇到大数据时在内存中的收集操作。但它仍然不是一个好的解决方案,因为全局错误处理程序可能难以维护。我希望有人能提供更好的解决方案。
推荐阅读
- linux - ID小于500的组的详细信息
- python - 尝试输出两个值时,Int object is not callable 错误
- python - 使用方括号的 Pandas 基础知识
- matlab - 如何找出一个数字在矩阵中的位置并删除它以及添加它?
- google-app-engine - 如何从 GCP 查看/下载当前 queue.yaml?
- python-3.x - IF ELSE 语句在 python 中不能正常工作
- python - 如果附加变量是“无”,则防止附加到字符串的最有效计算方法
- typescript - 如何单击 Web 元素,直到屏幕上显示警报消息?
- hibernate - 为什么将 Hibernate 与 h2 数据库一起使用时会出错?
- python - 解码base85编码字符串时出现base85溢出错误