我目前正在使用来与java支持的REST交互。实际上,我正在使用android注解向这个后端服务发送http调用,我必须说它很棒。基本上,Android注释允许您为服务调用定义一个接口,并为每个可用的api调用定义使用的http方法:它将生成与诸如编组/解编组之类的低级内容相关的所有锅炉板代码,并根据接口定义调用正确的http方法。
现在,我想为http请求设置一些头:我知道我只引用了定义所有调用的服务接口,我如何做到这一点?我也可以引用RestTemplate对象,但是现在似乎已经有了设置头的方法。
任何帮助都是非常感谢的
发布于 2012-09-14 08:30:23
我的方法是在应用程序类中创建一个ApiClient
实例,并设置一个自定义REST模板。
在我的例子中,我使用Jackson进行JSON消息转换:
RestTemplate restTemplate = new RestTemplate(fac);
MappingJacksonHttpMessageConverter converter =
new MappingJacksonHttpMessageConverter();
converter.getObjectMapper().configure(Feature.UNWRAP_ROOT_VALUE, true);
restTemplate
.getMessageConverters()
.add(converter);
mClient.setRestTemplate(restTemplate);
然后,我的请求工厂fac
如下所示:
ClientHttpRequestFactory fac = new HttpComponentsClientHttpRequestFactory() {
@Override
protected HttpUriRequest createHttpRequest(HttpMethod httpMethod, URI uri) {
HttpUriRequest uriRequest = super.createHttpRequest(httpMethod, uri);
// Add request headers
uriRequest.addHeader(
"Content-Type",
MediaType.APPLICATION_JSON_VALUE);
return uriRequest;
}
@Override
public ClientHttpRequest createRequest(URI uri, HttpMethod httpMethod)
throws IOException {
if (Config.DEBUG_REQUESTS) {
Log.d(TAG, uri);
}
return super.createRequest(uri, httpMethod);
}
};
警告
虽然这在我们办公室的所有安卓设备上都有效,但是最近我发现头似乎没有添加到 all 设备中!--我不知道为什么(或者具体是哪种设备),但是我正在查找它,当我找到解析度时,我会尝试更新这个答案。
https://stackoverflow.com/questions/12030209
复制相似问题