ResilientErrorHandler.java
package access.manage;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.nimbusds.jose.util.IOUtils;
import org.springframework.http.HttpMethod;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.web.client.DefaultResponseErrorHandler;
import java.io.IOException;
import java.net.URI;
import java.util.Map;
public class ResilientErrorHandler extends DefaultResponseErrorHandler {
private final ObjectMapper objectMapper;
public ResilientErrorHandler(ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
}
@Override
public void handleError(URI url, HttpMethod method, ClientHttpResponse response) throws IOException {
String responseBody = IOUtils.readInputStreamToString(response.getBody());
Map<String, Object> errorMap = this.objectMapper.readValue(responseBody, new TypeReference<>() {
});
if (ignoreError(errorMap)) {
//ignore this exception, as nothing is changed are wrong
return;
}
super.handleError(url, method, response);
}
protected static boolean ignoreError(Map<String, Object> errorMap) {
return errorMap.containsKey("validations") && ((String) errorMap.get("validations")).contains("No data is changed");
}
}