我有一个方法,目前看起来像这样:
protected void doHealthCheck(Health.Builder builder) {
try {
VaultHealth vaultHealth = this.webClient
.get()
.exchange()
.block()
.bodyToMono(VaultHealth.class)
.block();
if (vaultHealth.isInitialized() && !vaultHealth.isSealed() && !vaultHealth.isStandby()) {
builder.up();
return;
}
}
catch (Exception e) {
builder.down();
return;
}
builder.down();
}
我的理解是这是错误的。所以现在我正在考虑修复它,它应该是这样的:
this.webClient
.get()
.exchange()
.doOnSuccess(???)
.doOnError(Health.Builder::down);
doOnSuccess将返回一个ClientResponse,我需要在调用Health之前检查响应中的内容。建设者:起来。
如果我打电话。flatMap()而不是doOnSuccess,它会引发错误吗?还是我需要把它放在doOnSuccess里面?如果我把它放在doOnSuccess中,似乎我需要进行双重doOnSuccess(这不可能是对的,是吗?):
.doOnSuccess(x -> x.bodyToMono(VaultHealth.class).doOnSuccess(y -> if (y...) builder.up())
此外,我假设如果我以这种方式重新构造它,我不需要try/catch,因为doon错误可以处理这个问题?
虽然这个特殊的方法在操作完成后执行操作是有意义的,但是在我需要返回对象的情况下呢?我的另一个理解是,我永远不应该使用。布洛克,对吗?