我正在尝试调用多个服务(使用 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
方法的参数。
拉风的咖菲猫
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);
添加回答
举报
0/150
提交
取消