出现错误时自动连接

时间:2017-03-04 08:53:20

标签: java jackson

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

JsonNode monthlyUrlNode  = objectMapper.readValue(url, JsonNode.class);

如果失败,我想以30秒的延迟重新连接到网址

我提到了这个Retry a connection on timeout in Java,但它对我没什么用处

2 个答案:

答案 0 :(得分:0)

你有没有想过使用Proxy对象?代理允许您以一种独立于被调用方法执行相同干预的方式包装接口。让我们假设您已经创建了一个用于访问SomeService接口的客户端对象。然后,您可以创建一个内置30秒重试的代理类: 公共类ServiceProxy实现InvocationHandler {    private final SomeService realClient;    public ServiceProxy(SomeService realClientObject){       this.realClient = realClientObject;    }    @覆盖    public Object invoke(Object proxy,Method method,Object [] args)抛出Throwable {       Object result = method.invoke(realClient,args);       if(result instanceof URL){           JsonNode urlNode = objectMapper.readValue(url,JsonNode.class);           if(urlNode上的某些条件){              //等等并重试              了Thread.sleep(30000);              result = method.invoke(realClient,args);           }       }       返回结果;    } } 您通过将原始接口传递给代理对象来创建代理对象,如: 公共类ProxyFactory {     public static SomeService get(SomeService originalClient){         return(SomeService)Proxy.newProxyInstance(SomeService.class.getClassLoader(),                 new Class [] {SomeService.class},                 新的ServiceProxy(originalClient));     } }

答案 1 :(得分:0)

如果您需要这种精细控制,请不要将URL传递给杰克逊。使用适当的HTTP库将URL中的内容读入内存,根据需要重试,然后将其提供给Jackson。