为了账号安全,请及时绑定邮箱和手机立即绑定

使用过滤器和映射链接 Java Reactor Monos

使用过滤器和映射链接 Java Reactor Monos

牧羊人nacy 2023-04-26 14:06:54
我正在尝试调用多个服务(使用 Java Reactor),一个服务的输出将决定是否应该调用下一个服务。通过调用 validateSession API 验证会话是否有效检查会话是否有效并且是否有关联的登录名获取登录的详细信息检查登录详细信息中是否包含名字如果以上都通过,则生成凭据线.filter(details -> details != null && StringUtils.isNotBlank(details.getFName))给出错误,因为“细节”被解释为单声道。如果我更改代码以使用 flatMap 而不是 Map,它可以正常工作,但我想要一个同步响应,因为我需要等待一切完成才能生成凭据。.map(session -> dao.getDetails(session.getLogin()))                 .filter(details -> details != null && StringUtils.isNotBlank(details.getFName))以下是有问题的代码。Mono<Credentials> response = dao.validateSession(sessionId)                 .filter(session -> session != null && StringUtils.isNotBlank(session.getLogin()))                 .map(session -> dao.getDetails(session.getLogin()))                 .filter(details -> details != null && StringUtils.isNotBlank(details.getFName))                 .map(details -> dao.generateCredentials())                 .cast(Credentials.class);
查看完整描述

2 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

你可以这样简化:

Mono<Credentials> response = dao.validateSession(sessionId)
                .filter(session -> StringUtils.isNotBlank(session.getLogin()))
                .flatMap(session -> dao.getDetails(session.getLogin()))
                .filter(details -> StringUtils.isNotBlank(details.getFName))
                .flatMap(details -> dao.generateCredentials());

我已经更改了用于简化的运算符,但我认为最后一步需要将details对象用作generateCredentials方法的参数。


查看完整回答
反对 回复 2023-04-26
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

下面的代码解决了这个问题。

Map returns a <Mono<Mono>> while flatMap returns a <Mono>
Mono<Credentials> response = dao.validateSession(sessionId)
                .filter(session -> session != null && StringUtils.isNotBlank(session.getLogin()))
                .map(session -> dao.getDetails(session.getLogin()))
                .flatMap(session->session)
                .filter(details -> details != null && StringUtils.isNotBlank(details.getFName))
                .map(details -> dao.generateCredentials())
                .flatMap(credentials -> credentials);


查看完整回答
反对 回复 2023-04-26
  • 2 回答
  • 0 关注
  • 125 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信