基本上,我今天面临的是以下几点:
处理休息操作时处理请求超时.
看起来很简单,但编码并不容易.
这是我到目前为止的实现:
Listinterceptors = new ArrayList (); interceptors.add( new NetworkInterceptor() ); tpl.setInterceptors( interceptors );
所以现在,在设置拦截器之后,我想为模板设置自定义超时配置.
所以我做了以下事情:
tpl.getRequestFactory()
.
如果没有设置拦截器,则返回a InterceptingClientHttpRequestFactory
而不是SimpleClientHttpRequestFactory
返回.
因此,当它返回该InterceptingClientHttpRequestFactory
实例时,我无法设置超时.
您可以查看Spring的源代码,最后一种方法:http://grepcode.com/file_/repo1.maven.org/maven2/org.springframework/spring-web/3.1.1.RELEASE/org/springframework/http/客户机/支撑/ InterceptingHttpAccessor.java /?v =源
所以...任何提示?
我看到androidannotations文档有@Rest注释
@Rest(rootUrl="yourRootUrl",requestFactory=AppRequestFacetory.class,converters ={..},interceptors={..}) public interface RestApis extends RestClientErrorHandling{...};
AppRequestFacetory.class设置TIMEOUT如下:
@EBean class AppRequestFactory extends SimpleClientHttpRequestFactory { @AfterInject void afterinject() { setReadTimeout(20*1000); //set 20s read timeout setConnectTimeout(20*1000); //set 20s connect timeout } }
它的工作原理.享受androidannotations rest api
假设tpl是RestTemplate,您可以将SimpleClientHttpRequestFactory作为参数传递给它的构造函数:
List<ClientHttpRequestInterceptor> interceptors = new ArrayList<ClientHttpRequestInterceptor>(); interceptors.add( new NetworkInterceptor() ); SimpleClientHttpRequestFactory s = new SimpleClientHttpRequestFactory(); s.setReadTimeout(5000); s.setConnectTimeout(1000); RestTemplate tpl = new RestTemplate(s);//Or however you instantiated it tpl.setInterceptors( interceptors ); ClientHttpRequestFactory c = tpl.getRequestFactory();
希望能帮助到你.