2

私は Android アノテーションを使用していますが、最近、Spring Rest テンプレートを使用すると EOFExceptionが発生するというバグが発見されました。これは、アノテーションを使用して修正する方法がわかりません。投稿リクエストがあります:

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

さて、ヘッダーを設定するにはどうすればよいですか

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

このリクエストに?

ありがとう!

4

1 に答える 1

7

2 つのソリューション:

解決策 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 インターフェイスが注入されたアノテーション付きクラスを作成する必要があります。他のクラスに注入されたすべての Rest インターフェイスをこの Bean に置き換えます。この新しい 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 に答える