Spring for Android 支持在Android环境下使用Spring框架,其意在简化Android本地开发。这包括能够在你的Android应用程序的Rest客户端使用RestTemplate。除了本次主要讲解的网络请求部分,Spring for Android还提供了基于OAuth支持将Spring Social的功能集成到Android应用程序, 授权客户机和实现流行的社交网站,如Twitter和Facebook。
RestTemplate Module
Spring的RestTemplate是一个健壮的、流行的基于java的REST client。Spring Android的RestTemplate模块提供一个能够在Android环境下工作的RestTemplate版本。
RestTemplate类是SFA RestTemplate组件包的核心类。他在概念上类似Spring框架其他同级项目中提供的模板类。RestTemlpate的行为表现取决于他提供的那些回调方法,同时通过配置合适的HttpMessageConverter 类,用户可以高效的将对象转换成HTTP请求中的信息或从响应消息中将信息转换回对应的对象。
每当创建一个新的RestTemplate实例,构造器就会生成配套的辅助对象用于支持RestTemplate的功能。以下是RestTemplate组件中一些提供支持的模块介绍。
HTTP Client
RestTemplate 提供了抽象的RESTful HTTP 请求的模块,内部实现中,RestTemplate 封装了原生的Android HTTP 客户端连接包。这包括标准的J2SE连接组件(用SimpleClientHttpRequestFactory封装)和HttpComponents HttpClient组件(用HttpComponentsClientHttpRequestFactory封装)。默认情况下具体使用哪种ClientHttpRequestFactory 取决于Android的版本。
@SuppressWarnings("deprecation") protected HttpAccessor() { if (httpClient43Present) { this.requestFactory = new HttpComponentsClientHttpRequestFactory(); } else if (okHttpPresent) { this.requestFactory = new OkHttpClientHttpRequestFactory(); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) { this.requestFactory = new SimpleClientHttpRequestFactory(); } else { this.requestFactory = new org.springframework.http.client.HttpComponentsAndroidClientHttpRequestFactory(); } }
(2.3之后建议使用标准的J2SE连接组件)
Gzip压缩器
HTTP规范中允许通过在请求头中加入Accept-Encoding参数指定传输字节流的压缩方式。目前为止,RestTemplate 可以通过Gzip压缩组件支持在发送和接受时通过gzip(仅支持gzip)格式压缩过的数据。
对象-Json转换
如果需要支持这种转换,SFA的RestTemplate需要第三方Json数据映射包的支持。目前SFA提供三种包支持:Jackson JSON Processor, Jackson 2.x, 和 Google Gson。虽然Jackson 系列是有名的JSON解析包,但Gson的包更小,更适合生成小型的Android程序安装包。
SFA 将支持代码放在包 org.springframework.http.converter.json中。
RSS和Atom 摘要文件支持
RSS和Atom的支持也需要第三方包, Android ROME Feed Reader包就提供了相应的功能。
SFA 将支持代码放在包org.springframework.http.converter.feed 中。
所需要的包文件
spring-android-rest-template-{version}.jar
spring-android-core-{version}.jar
RestTemplate 构造器
下面列出四种RestTemplate 的构造方法。默认的构造方法不包含消息的转换器,因此必须自己添加消息转换器。
如上文所讲,如果需要一个特别ClientHttpRequestFactory ,也可以向构造器中传入一个ClientHttpRequestFactory 的实例参数。
RestTemplate();
RestTemplate(boolean includeDefaultConverters);
RestTemplate(ClientHttpRequestFactory requestFactory);
RestTemplate(boolean includeDefaultConverters, ClientHttpRequestFactory requestFactory);
RestTemplate API简介
RestTemplate 对应主要的六种Http 访问方法封装了6类高层调用方法,通过他们可以非常轻松且高效的完成对RESTful 服务的服务请求