【发布时间】:2022-01-23 20:34:06
【问题描述】:
我正在努力理解反应式流程。我的理解是,在Mono 或Flux 中操作数据时,必须保持类型一致性。但是,当该进程中出现问题时,必须抛出类似于异常的东西,这会破坏类型一致性。
目前,我有一个命令式流程来获取验证令牌 ID 并对其进行处理。在两种情况下,它会抛出异常(InvalidTokenException 是404 响应;ExpiredTokenException 是410),最后修改并保存帐户,并删除令牌。我想将其转换为反应过程:
public AccountDto verifyAccountByToken (UUID tokenId) {
VerifyToken vToken = verifyTokenRepository.findByToken(tokenId);
if (vToken == null) {
throw new InvalidTokenException();
}
if (vToken.isExpired()) {
verifyTokenRepository.delete(vToken);
throw new ExpiredTokenException();
}
Account account = vToken.getAccount();
account.addRole(AccountRole.VERIFIED);
account.deleteRole(AccountRole.UNVERIFIED);
accountRepository.save(account);
verifyTokenRepository.delete(vToken);
return new AccountDto(account);
}
我相信下面的内容对于数据操作过程来说基本上是正确的,但我应该如何处理条件分支? – 我怎么说:做这个如果空? (我想我可以使用.filter() 作为捕获过期案例的一种方式。)如何将其转换为错误类型?
public Mono<AccountDto> verifyAccountByToken (UUID tokenId) {
return verifyTokenRepository.findByToken(tokenId)
// the bits I can't figure out to deal with Invalid and Expired tokens;
.flatMap(vToken -> {
verifyTokenRepository.delete(vToken);
return vToken.getAccount();
})
.flatMap(account -> {
account.addRole(AccountRole.VERIFIED);
account.deleteRole(AccountRole.UNVERIFIED);
return accountRepository.save(account);
})
.map(account -> new AccountDto(account));
}
【问题讨论】:
标签: java project-reactor