Spring webflux 弹簧腹板流量侧操作返回单声道<;无效>;
那么,有没有更明确的方法来实现这一目标?在这种情况下,zipWhen的替代方法是什么?如果不需要Spring webflux 弹簧腹板流量侧操作返回单声道<;无效>;,spring-webflux,project-reactor,Spring Webflux,Project Reactor,那么,有没有更明确的方法来实现这一目标?在这种情况下,zipWhen的替代方法是什么?如果不需要deleteById方法的返回值,则不需要使用zip;在这里,您只想从存储库中删除以前的令牌(如果它在存储库中),然后返回它。像这样的方法应该会奏效: refreshTokenReactiveRepository.deleteById(previousRefreshToken.getId()) .then(Mono.just("")) public Mon
deleteById
方法的返回值,则不需要使用zip
;在这里,您只想从存储库中删除以前的令牌(如果它在存储库中),然后返回它。像这样的方法应该会奏效:
refreshTokenReactiveRepository.deleteById(previousRefreshToken.getId())
.then(Mono.just(""))
public Mono-ExchangerRefreshToken(字符串refreshTokenValue){
返回refreshTokenReactiveRepository.findByValue(refreshTokenValue)
.flatMap(以前的刷新令牌->
反应性沉积
.deleteById(previousRefreshToken.getId())
.thenReturn(previousRefreshToken.getAccount())
)
.flatMap(this::generateTokenPair);
}
您可以通过在存储库中添加
deleteByValue
方法来简化这一过程;您可以删除数据存储中的令牌,并在单个数据库查询中获取它。Brian,谢谢您的回答!但是'then'的arg变量没有返回Mono,因此zipWhen中的“combinator”将不会被调用,因此zipWhen的输出将是Mono。您能更新一下您的问题以分解一些东西吗?当我们没有您正在使用的自定义方法的签名时,很难进行推理。好的,我会的。我已经更新了我的答案-感谢您编辑您的问题!
public Mono<TokenPair> exchangeRefreshToken(String refreshTokenValue) {
return refreshTokenReactiveRepository.findByValue(refreshTokenValue)
.zipWhen(
previousRefreshToken ->
refreshTokenReactiveRepository.deleteById(previousRefreshToken.getId())
.then(Mono.just("")),
(previousRefreshToken, deleteResult) -> previousRefreshToken
)
.map(RefreshToken::getAccount)
.flatMap(this::generateTokenPair);
}
refreshTokenReactiveRepository.deleteById(previousRefreshToken.getId())
.then(Mono.just(""))
public Mono<TokenPair> exchangeRefreshToken(String refreshTokenValue) {
return refreshTokenReactiveRepository.findByValue(refreshTokenValue)
.flatMap(previousRefreshToken ->
refreshTokenReactiveRepository
.deleteById(previousRefreshToken.getId())
.thenReturn(previousRefreshToken.getAccount())
)
.flatMap(this::generateTokenPair);
}