2

我正在使用 Android 注释,最近发现了一个错误Spring Rest Template 使用会导致 EOFException,我不知道如何使用注释来修复它。我有发帖请求:

@Post("base/setItem.php")
Item setItem(Protocol protocol);

现在,我如何设置标题

headers.set("Connection", "Close");

对这个要求?

谢谢!

4

1 回答 1

7

两种解决方案:

解决方案 1

自 AA 3.0(仍处于快照中)以来,您可以在注释上使用拦截器字段并实现一个自定义,它将为每个请求设置标头:@RestClientHttpRequestInterceptor

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);
    }
}

解决方案 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();
}

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());
    }
}
于 2013-08-22T09:49:14.193 回答