Rom*_*man 2 android http-headers android-annotations
我正在使用Android注释,最近发现了一个错误Spring Rest Template使用导致EOFException,我不知道如何使用注释修复.我有帖子请求:
@Post("base/setItem.php")
Item setItem(Protocol protocol);
Run Code Online (Sandbox Code Playgroud)
现在,我该如何设置标题
headers.set("Connection", "Close");
Run Code Online (Sandbox Code Playgroud)
这个要求?
谢谢!
两种解决方案
解决方案1
从AA 3.0开始(仍在快照中),您可以在注释上使用拦截器字段@Rest并实现一个自定义ClientHttpRequestInterceptor,它将为每个请求设置标头:
public class HeadersRequestInterceptor implements ClientHttpRequestInterceptor {
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
request.getHeaders().set("Connection", "Close");
return execution.execute(request, body);
}
}
Run Code Online (Sandbox Code Playgroud)
解决方案2
如果AA <= 2.7.1,则应该在@EBean注入Rest接口的情况下创建带注释的类.用这个bean替换其他类上的所有注入的Rest接口.在这个新bean中,创建一个@AfterInject方法来检索RestTemplate实例并配置解决方案1的拦截器:
RestClient.java:
@Rest(...)
public interface RestClient {
@Post("base/setItem.php")
Item setItem(Protocol protocol);
RestTemplate getRestTemplate();
}
Run Code Online (Sandbox Code Playgroud)
RestClientProxy.java:
@EBean
public class RestClientProxy {
@RestService
RestClient restClient;
@AfterInject
void init() {
RestTemplate restTemplate = restClient.getRestTemplate();
List<ClientHttpRequestInterceptor> interceptors = restTemplate.getInterceptors();
interceptors.add(new HeadersRequestInterceptor());
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2362 次 |
| 最近记录: |