Я пытаюсь использовать Spring Retry для десериализации Джексона в объект 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"
}
}
Повтор не запускается, но генерируется исключение:
Error while extracting response for type myPOJO and content type [application/json;charset=utf-8]; nested exception is org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Bad Response; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Bad Response