Spring web-flux 端操作返回 Mono<Void>
Spring web-flux side operation returning Mono<Void>
public interface RefreshTokenReactiveRepository extends ReactiveCrudRepository<RefreshToken, Long> {
Mono<RefreshToken> findByValue(String value);
}
下一个方法在 TokenService 中 class。
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())
副操作,这取决于之前的单声道结果 (Mono<RefreshToken>
) 和 returns Mono<Void>
。那我要zipWhen return Mono<RefreshToken>
。
我只是通过使用 then
替换 returning Mono<Void>
值才实现的:
refreshTokenReactiveRepository.deleteById(previousRefreshToken.getId())
.then(Mono.just(""))
那么,有没有更明确的方法来实现这个目标呢?在这种情况下,zipWhen 的替代方案是什么?
如果不需要deleteById
方法的return值,则不需要使用zip
;在这里,您只需要从存储库中删除以前的令牌(如果存在),然后 returning 它。这样的事情应该有效:
public Mono<TokenPair> exchangeRefreshToken(String refreshTokenValue) {
return refreshTokenReactiveRepository.findByValue(refreshTokenValue)
.flatMap(previousRefreshToken ->
refreshTokenReactiveRepository
.deleteById(previousRefreshToken.getId())
.thenReturn(previousRefreshToken.getAccount())
)
.flatMap(this::generateTokenPair);
}
您可以通过在存储库中添加 deleteByValue
方法来简化此过程;您将删除数据存储中的令牌并在单个数据库查询中取回它。
public interface RefreshTokenReactiveRepository extends ReactiveCrudRepository<RefreshToken, Long> {
Mono<RefreshToken> findByValue(String value);
}
下一个方法在 TokenService 中 class。
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())
副操作,这取决于之前的单声道结果 (Mono<RefreshToken>
) 和 returns Mono<Void>
。那我要zipWhen return Mono<RefreshToken>
。
我只是通过使用 then
替换 returning Mono<Void>
值才实现的:
refreshTokenReactiveRepository.deleteById(previousRefreshToken.getId())
.then(Mono.just(""))
那么,有没有更明确的方法来实现这个目标呢?在这种情况下,zipWhen 的替代方案是什么?
如果不需要deleteById
方法的return值,则不需要使用zip
;在这里,您只需要从存储库中删除以前的令牌(如果存在),然后 returning 它。这样的事情应该有效:
public Mono<TokenPair> exchangeRefreshToken(String refreshTokenValue) {
return refreshTokenReactiveRepository.findByValue(refreshTokenValue)
.flatMap(previousRefreshToken ->
refreshTokenReactiveRepository
.deleteById(previousRefreshToken.getId())
.thenReturn(previousRefreshToken.getAccount())
)
.flatMap(this::generateTokenPair);
}
您可以通过在存储库中添加 deleteByValue
方法来简化此过程;您将删除数据存储中的令牌并在单个数据库查询中取回它。