Java 发生错误时自动连接
我正在使用android应用程序,当我尝试访问url时,由于连接不良导致我的应用程序失败,我经常收到HTTP错误500。从URL返回的响应是JSON格式的,所以为了解析这个JSON,我使用了jackson apiJava 发生错误时自动连接,java,jackson,Java,Jackson,我正在使用android应用程序,当我尝试访问url时,由于连接不良导致我的应用程序失败,我经常收到HTTP错误500。从URL返回的响应是JSON格式的,所以为了解析这个JSON,我使用了jackson api JsonNode monthlyUrlNode = objectMapper.readValue(url, JsonNode.class); 如果出现故障,我希望以30秒的延迟重新连接到url 我引用了这个,但它对我没有多大用处您想过使用代理对象吗?代理让您以一种方式包装一个接口,
JsonNode monthlyUrlNode = objectMapper.readValue(url, JsonNode.class);
如果出现故障,我希望以30秒的延迟重新连接到url
我引用了这个,但它对我没有多大用处您想过使用代理对象吗?代理让您以一种方式包装一个接口,您可以独立于被调用的方法执行相同的干预。假设您已经创建了一个用于访问接口SomeService的客户端对象。然后,您可以创建一个内置30秒重试的代理类:
public class ServiceProxy implements InvocationHandler {
private final SomeService realClient;
public ServiceProxy(SomeService realClientObject) {
this.realClient = realClientObject;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object result = method.invoke(realClient, args);
if (result instanceof URL) {
JsonNode urlNode = objectMapper.readValue(url, JsonNode.class);
if (some condition on urlNode) {
// Wait and retry
Thread.sleep(30000);
result = method.invoke(realClient, args);
}
}
return result;
}
}
通过将代理对象传递给原始接口来创建代理对象,如:
public class ProxyFactory {
public static SomeService get(SomeService originalClient) {
return (SomeService)Proxy.newProxyInstance(SomeService.class.getClassLoader(),
new Class[]{SomeService.class},
new ServiceProxy(originalClient));
}
}
如果您需要这种精细的控制,请不要将URL传递给Jackson。使用适当的HTTP库将URL中的内容读取到内存中,根据需要重试,然后将其馈送给Jackson。您是否可以共享经过修改的代码?我的建议是,您应该在应用程序端获取流,然后使用它来处理JSON。因为在发生异常的情况下,您可以根据自己的逻辑适当地处理网络,而不是依赖Jackson API来实现错误处理。