最近在做一个项目,涉及服务器与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. android 中文api (62) ―― ViewSwitcher.ViewFactory
  2. 基于Paho Android(安卓)Service 实现MQTT协议通信Android客户端
  3. Android学习笔记之——UI设计
  4. Android(安卓)学习笔记--android――listview总结
  5. Android(安卓)时间字符串 转成UTC时间转为指定时间的时间字符串
  6. 移植android ndk c++各种兼容性问题
  7. android Retrofit 简单使用
  8. 【转】Android(安卓)多渠道打包:使用Gradle和Android(安卓)Studio
  9. Android(安卓)monkey环境搭建及使用

随机推荐

  1. Android——Json和Gson分别是什么,以及Jso
  2. Android实训案例(八)——单机五子棋游戏,自
  3. Android热更新之so库的热更新
  4. unity接android sdk的碰到的一些问题记录
  5. Android 常见滤镜的实现,怀旧,底片,浮雕,Colo
  6. 二 Android优势和劣势分析(面试华为的人
  7. android之各种图形绘制
  8. Android的开源与闭源
  9. 有关WiFi SSID的获取
  10. 通过Canvas的叠加实现Android中环形View