最近在做一个项目,涉及服务器与Android客户端的通信,是用springframework来实现的,下面是一些学习资料。


一、RestTemplate

官方文档http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html

RestTemplate是spring的核心类。它强制基于REST的原则,简化了和HTTP服务器的交流。它可以处理HTTP连接;应用程序代码只需要提供URL和可能需要的模板变量,并提取结果就可以了。

RestTemplate的网络请求方法如下:

HTTP method RestTemplate methods
DELETE delete(java.lang.String, java.lang.Object...)
GET getForObject(java.lang.String, java.lang.Class, java.lang.Object...)

getForEntity(java.lang.String, java.lang.Class, java.lang.Object...)
HEAD headForHeaders(java.lang.String, java.lang.Object...)
OPTIONS optionsForAllow(java.lang.String, java.lang.Object...)
POST postForLocation(java.lang.String, java.lang.Object, java.lang.Object...)

postForObject(java.lang.String, java.lang.Object, java.lang.Class, java.lang.Object...)
PUT put(java.lang.String, java.lang.Object, java.lang.Object...)
any exchange(java.lang.String, org.springframework.http.HttpMethod, org.springframework.http.HttpEntity<?>, java.lang.Class, java.lang.Object...)

execute(java.lang.String, org.springframework.http.HttpMethod, org.springframework.web.client.RequestCallback, org.springframework.web.client.ResponseExtractor, java.lang.Object...)


二、RestTemplate定义和初始化


RestTemplate restTemplate = new RestTemplate();restTemplate.getMessageConverters().add(new FormHttpMessageConverter());restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());restTemplate.getMessageConverters().add(new ByteArrayHttpMessageConverter()); 

getMessageConverters()用来获得消息体(message body)转换器,这里添加了FormHttpMessageConverter、MappingJacksonHttpMessageConverter、ByteArrayHttpMessageConverter三个消息体转换器

1、Interface HttpMessageConverter

这个接口用来指定一个转换器,可以在Http请求和响应之间相互转换。

2、FormHttpMessageConverter

实现了HttpMessageConverter接口,它可以处理表单数据,包括多段表单数据(如上传的文件)。

这个转换器可以编写application/x-www-form-urlencoded和multipart/form-data媒体类型,读取application/x-www-form-urlencoded媒体类型,但不能读取multipart/form-data。

3、MappingJacksonHttpMessageConverter

实现了HttpMessageConverter接口,它可以使用Jackson1.x的ObjectMapper来读写JSON。

这个对象可以用来绑定到指定类型的数据bean、或者无类型的HashMap实例中。

默认情况下,这个转换器支持application/json。

4、ByteArrayHttpMessageConverter

实现了HttpMessageConverter接口,它可以读写字节数组。

默认情况下此转换器支持所有媒体类型*/*


三、RestTemplate.exchange()

定义好RestTemplate后,直接调用exchange()函数,就可以将访问指定url返回的JSON自动解析到结果类ReceiveResult中:

private ReceiveResult getReceiveResult(String data){        HashMap urlVariables = new HashMap();        urlVariables.put("data", data);        // HTTP头部        HttpHeaders httpHeaders = new HttpHeaders();        httpHeaders.setAccept(Collections.singletonList(MediaType                .parseMediaType("application/json")));        // HTTP实体        HttpEntity requestEntity = new HttpEntity(httpHeaders);        return restTemplate.exchange(                rootUrl.concat("/.../.../.../...?id={data}"),                HttpMethod.GET,                 requestEntity,                 ReceiveResult.class,                urlVariables).getBody();}   
先看看exchange()函数:

public  ResponseEntity exchange(String url,                                      HttpMethod method,                                      HttpEntity<?> requestEntity,                                      Class responseType,                                      Map uriVariables)                               throws RestClientException

向指定的URI执行HTTP方法(GET、POST等),将指定的请求实体写到HTTP请求部分,并将HTTP响应作为ResponseEntity返回

参数:
url - the URL
method -  HTTP方法 (GET, POST, etc)
requestEntity - 要写入请求部分的实体(可以是HTTP头部和/或者HTTP Body),可为null
responseType -返回值的类型
uriVariables -  要在Uri中扩展添加的多个变量
返回:
把响应作为ResponseEntity实体返回
异常:
RestClientException

注意我的结果类ReceiveResult是用org.codehaus.jackson.annotate包来进行映射的。

public class ReceiverResult{@JsonProperty("id")private String id;@JsonProperty("data")private String data;        @JsonCreator        public ReceiverResult(@JsonProperty("id") String id,                @JsonProperty("data") String data) {            this.data = data;            this.id = id;        } }



PS:未完待续


更多相关文章

  1. 简单的通过request判断客户端设备类型
  2. Android Get Network Type获得网络类型
  3. js判断手机系统类型
  4. Android NDK开发之旅(3): 详解JNI数据类型与C/C++、Java之间的互
  5. Android 开发中Parcel存储类型和数据容器
  6. 从零学Android(八)、Android资源类型之Drawable资源
  7. android JNI java与C++传递String数组(引用类型)

随机推荐

  1. 优秀的Android文件管理器
  2. 新浪微博Android客户端学习记录一:完成Log
  3. Android知识点——更改软键盘回车键
  4. android:scaleType属性
  5. Android控件GridView的使用
  6. Android 自定义TextView 实现文本间距
  7. Bing Maps Android SDK Released
  8. android 2.2 的新功能 ndk-gdb调试.
  9. Android设计模式系列(8)--SDK源码之工厂
  10. 关于Android 横竖屏切换(避免Activity在转