Rei*_*erd 5 rest spring android spring-mvc android-annotations
基本上,我今天面临的是以下几点:
看起来很简单,但编码并不容易.
这是我到目前为止的实现:
List<ClientHttpRequestInterceptor> interceptors = new ArrayList<ClientHttpRequestInterceptor>();
interceptors.add( new NetworkInterceptor() );
tpl.setInterceptors( interceptors );
Run Code Online (Sandbox Code Playgroud)
所以现在,在设置拦截器之后,我想为模板设置自定义超时配置.
所以我做了以下事情:
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 =源
所以...任何提示?
假设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();
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你.
小智 7
我看到androidannotations文档有@Rest注释
@Rest(rootUrl="yourRootUrl",requestFactory=AppRequestFacetory.class,converters ={..},interceptors={..})
public interface RestApis extends RestClientErrorHandling{...};
Run Code Online (Sandbox Code Playgroud)
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
}
}
Run Code Online (Sandbox Code Playgroud)
它的工作原理.享受androidannotations rest api
| 归档时间: |
|
| 查看次数: |
3913 次 |
| 最近记录: |