Spring for android实现客户端与服务器的通信
2014-03-27 16:55
357 查看
最近在做一个项目,涉及服务器与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的网络请求方法如下:
二、RestTemplate定义和初始化
2、FormHttpMessageConverter
实现了HttpMessageConverter接口,它可以处理表单数据,包括多段表单数据(如上传的文件)。
这个转换器可以编写application/x-www-form-urlencoded和multipart/form-data媒体类型,读取application/x-www-form-urlencoded媒体类型,但不能读取multipart/form-data。
3、
实现了HttpMessageConverter接口,它可以使用Jackson1.x的ObjectMapper来读写JSON。
这个对象可以用来绑定到指定类型的数据bean、或者无类型的HashMap实例中。
默认情况下,这个转换器支持application/json。
4、
实现了HttpMessageConverter接口,它可以读写字节数组。
默认情况下,此转换器支持所有媒体类型(*/*)。
三、RestTemplate.exchange()
定义好RestTemplate后,直接调用exchange()函数,就可以将访问指定url返回的JSON自动解析到结果类ReceiveResult中:
向指定的URI执行HTTP方法(GET、POST等),将指定的请求实体写到HTTP请求部分,并将HTTP响应作为ResponseEntity返回
参数:
返回:把响应作为ResponseEntity实体返回异常:
注意我的结果类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:未完待续
一、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<T>, java.lang.Object...) |
getForEntity(java.lang.String, java.lang.Class<T>, 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<T>, 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<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 = 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:未完待续
相关文章推荐
- unity3d Android客户端与PC服务器实现Socket通信(wifi)
- Android客户端与PC服务器实现Socket通信(wifi)
- unity3d Android客户端与PC服务器实现Socket通信(wifi)
- unity3d Android客户端与PC服务器实现Socket通信(wifi)
- Socket实现Android客户端与服务器的通信
- unity3d Android客户端与PC服务器实现Socket通信(wifi)
- Android BLE与终端通信(四)——实现服务器与客户端即时通讯功能
- Android中socket编程实现简单的客户端和服务器之间的通信
- Android Socket编程基于TCP实现客户端与服务器简易通信
- 智能点餐系统开发纪实1-----java服务器搭建,android客户端实现通信
- android的Socket编程---实现简单的服务器,并与客户端通信
- unity3d Android客户端与PC服务器实现Socket通信(wifi)
- Android 使用Mina的Nio实现客户端服务器通信
- Android客户端与PC服务器实现Socket通信(wifi)
- Android客户端与PC服务器实现Socket通信
- Android客户端与PC服务器实现Socket通信(wifi)
- Android BLE与终端通信(四)——实现服务器与客户端即时通讯功能
- 实现PHP服务器+Android客户端(Retrofit+RxJava)第四天客户端与服务器通信的实现
- Android BLE与终端通信(四)——实现服务器与客户端即时通讯功能
- Android客户端与PC服务器实现Socket通信(wifi)