Java 发生错误时自动连接

Java 发生错误时自动连接,java,jackson,Java,Jackson,我正在使用android应用程序,当我尝试访问url时,由于连接不良导致我的应用程序失败,我经常收到HTTP错误500。从URL返回的响应是JSON格式的,所以为了解析这个JSON,我使用了jackson api JsonNode monthlyUrlNode = objectMapper.readValue(url, JsonNode.class); 如果出现故障,我希望以30秒的延迟重新连接到url 我引用了这个,但它对我没有多大用处您想过使用代理对象吗?代理让您以一种方式包装一个接口,

我正在使用android应用程序,当我尝试访问url时,由于连接不良导致我的应用程序失败,我经常收到HTTP错误500。从URL返回的响应是JSON格式的,所以为了解析这个JSON,我使用了jackson api

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来实现错误处理。