我正在使用 Android 注释,最近发现了一个错误 Spring Rest Template usage causes EOFException我不知道如何使用注释修复。我有发帖请求:
@Post("base/setItem.php")
Item setItem(Protocol protocol);
现在,我该如何设置标题
headers.set("Connection", "Close");
这个请求?
谢谢!
最佳答案
两种解决方案:
解决方案一
自 AA 3.0(仍在快照中)起,您可以使用 interceptors @Rest
注释上的字段并实现自定义 ClientHttpRequestInterceptor
,它将为每个请求设置 header :
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);
}
}
方案二
对于 AA <= 2.7.1,您应该创建一个带有 @EBean
注释的类,并注入(inject)您的 Rest 接口(interface)。用这个 bean 替换其他类上所有注入(inject)的 Rest 接口(interface)。在这个新 bean 中,创建一个 @AfterInject
方法,它将检索 RestTemplate
实例并配置解决方案 1 的拦截器:
RestClient.java :
@Rest(...)
public interface RestClient {
@Post("base/setItem.php")
Item setItem(Protocol protocol);
RestTemplate getRestTemplate();
}
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());
}
}
关于Android注解REST集头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18366917/