gpt4 book ai didi

java - 如何在 Spring java 中获取 RetryTemplate.execute 的结果?

转载 作者:行者123 更新时间:2023-12-02 10:30:24 26 4
gpt4 key购买 nike

我对 java 和 spring 相当陌生,我正在尝试弄清楚如何接收 RetryTemplate.execute 的结果命令。我想退回false如果执行命令失败,并且 true如果成功的话。我尝试在 execute 中分配 res 的值功能,但我得到的只是一个错误,指出 java: local variables referenced from a lambda expression must be final or effectively final

这是我的代码:

private boolean forward(String message) {
boolean res;
retryTemplate.execute(retryCallback -> {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);

ResponseEntity<String> responses = restTemplate.postForEntity(kafkaForwarderSetting.getUrlEndpoint(),
new HttpEntity<>(message, headers), String.class);

if (responses.getStatusCodeValue() > 300) {
throw new ForwarderException("Error occurred while forwarding message to endpoint!",
retryCallback.getLastThrowable());
}
// SET res to true
return true;
}, recoveryCallback -> {

// SET res to false
return false;
});

return res;
}

从文档来看,似乎 execute返回<T, E extends Throwable>关于retryTemplate每当我返回该值(例如第 12 行的 return true;)时,我应该能够访问该值。

但是我不知道如何获取它并打印出 retryTemplate它本身给了我org.springframework.retry.support.RetryTemplate@5d65976d

最佳答案

编译器错误

local variables referenced from a lambda expression must be final or effectively final

意味着在 Java 中,您无法更改在 lambda 内部声明的变量的引用。

要避免此问题,您可以使用 Apache Commons Lang 3 中的 MutableBoolean图书馆。

首先,将库包含到您的 pom.xml 中:

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8.1</version>
</dependency>

然后,使用以下命令将 MutableBoolean 导入到您的类中

import org.apache.commons.lang3.mutable.MutableBoolean;

现在,替换

boolean res;

final MutableBoolean res = new MutableBoolean();

final 是可选的,但很好的做法。

要设置该值,请写入

res.setValue(true);

res.setValue(false);

您可以使用以下三种方法之一来检索 lambda 之后的值:

boolean isFalse = res.isFalse();
boolean isTrue = res.isTrue();
Boolean value = res.getValue();

请注意,res.getValue() 将为您提供一个装箱的 Boolean,而其他两种方法则为您提供一个未装箱的 boolean。这些非常适合 if 语句。

我希望这会有所帮助。

关于java - 如何在 Spring java 中获取 RetryTemplate.execute 的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53647982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com