Spring for android实现客户端与服务器的通信

最近在做一个项目,涉及服务器与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 methodRestTemplate methods
DELETEdelete(java.lang.String, java.lang.Object...)
GETgetForObject(java.lang.String, java.lang.Class<T>, java.lang.Object...)

getForEntity(java.lang.String, java.lang.Class<T>, java.lang.Object...)
HEADheadForHeaders(java.lang.String, java.lang.Object...)
OPTIONSoptionsForAllow(java.lang.String, java.lang.Object...)
POSTpostForLocation(java.lang.String, java.lang.Object, java.lang.Object...)

postForObject(java.lang.String, java.lang.Object, java.lang.Class<T>, java.lang.Object...)
PUTput(java.lang.String, java.lang.Object, java.lang.Object...)
anyexchange(java.lang.String, org.springframework.http.HttpMethod, org.springframework.http.HttpEntity<?>, java.lang.Class<T>, java.lang.Object...)

execute(java.lang.String, org.springframework.http.HttpMethod, org.springframework.web.client.RequestCallback, org.springframework.web.client.ResponseExtractor<T>, 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<T>

这个接口用来指定一个转换器,可以在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<String, Object> urlVariables = new HashMap<String, Object>();
        urlVariables.put("data", data);
        // HTTP头部
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setAccept(Collections.singletonList(MediaType
                .parseMediaType("application/json")));
        // HTTP实体
        HttpEntity<Object> requestEntity = new HttpEntity<Object>(httpHeaders);
        return restTemplate.exchange(
                rootUrl.concat("/.../.../.../...?id={data}"),
                HttpMethod.GET, 
                requestEntity, 
                ReceiveResult.class,
                urlVariables).getBody();
}

先看看exchange()函数:

public <T> ResponseEntity<T> exchange(String url,
                                      HttpMethod method,
                                      HttpEntity<?> requestEntity,
                                      Class<T> responseType,
                                      Map<String,?> 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:未完待续


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值