gpt4 book ai didi

java - 使用 Spring @Retryable 和 Jackson json 反序列化

转载 作者:行者123 更新时间:2023-12-02 03:54:37 25 4
gpt4 key购买 nike

我正在尝试使用 Spring Retry 将 Jackson 反序列化为 POJO 对象,如下所示:

@Data
public class myPOJO {
private String cmpStr = "test";
private String myStr;

@Retryable(maxAttempts=3, value=RuntimeException.class, backoff=@Backoff(delay=3000))
@JsonProperty("jsonElement")
private void retryableFunc(Map<String, Object> jsonElement) {
try {
myStr = jsonElement.get("jsonAttribute");
if (!Objects.equals(myStr, cmpStr))
throw new RuntimeException("Bad Response");
}
catch (Exception e) {
throw new RuntimeException("Bad Response");
}
}

@Recover
private void recover(Exception e) {
System.out.println("Recover triggered");
}
}

MyPOJO 的实例化如下:

RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Collections.singleTonList(MediaType.APPLICATION_JSON));
String jsonAttribute = restTemplate.exchange(URL, HttpMethod.GET, new HttpEntity<>(headers), myPOJO.class).getBody().getMyStr();

主应用程序如下所示:

@SpringBootApplication
@EnableRetry
public class mainApplication {
public static void main(String[] args) {
SpringApplication.run(mainApplication.class, args);
}
}

JSON 响应如下所示:

{
"jsonElement": {
"jsonAttribute": "test1"
}
}

永远不会触发重试,但会抛出异常:

提取类型 myPOJO 和内容类型 [application/json;charset=utf-8] 的响应时出错;嵌套异常是 org.springframework.http.converter.HttpMessageNotReadableException: JSON 解析错误: 错误响应;嵌套异常是 com.fasterxml.jackson.databind.JsonMappingException:错误响应

最佳答案

我认为你有一些基本的误解。 Spring Retry只能应用于Spring管理的bean。您的 POJO 可能由 Spring 组件 (RestTemplate) 创建,它不是应用程序上下文中的托管 @Bean

您不能对不受应用程序上下文管理的对象使用基于注释的重试。

您仍然没有展示如何调用 retryableFunc,但您应该从某个辅助 bean 调用您的对象:

public class MyHelper {

@Retryable(...)
public void validateMyPojo(MyPojo pojo, Map<...,...> jsonElement) {
pojo.retryableFunc(jsonElement);
}

}

@Bean
public MyHelper myHelper() {
return new MyHelper();
}

或者,您可以简单地使用 RetryTemplate 来调用该方法。

关于java - 使用 Spring @Retryable 和 Jackson json 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56757657/

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