4

私は現在、Spring Android Resttemplate を使用して、Java ベースの REST API とやり取りしています。実際、私はこのバックエンド サービスに http 呼び出しを送信するためにAndroid アノテーションを使用しています。基本的に、Android アノテーションを使用すると、サービス呼び出しのインターフェイスと、使用可能な各 API 呼び出しに使用される http メソッドを定義できます。マーシャリング/アンマーシャリングなどの低レベルのものに関連するすべての定型コードを生成し、適切なインターフェイス定義に応じた http メソッド。

ここで、いくつかのヘッダーを http 要求に設定したいと思います。すべての呼び出しを定義する Service インターフェイスへの参照しかないことを知っていると、どうすればこれを達成できますか? RestTemplate オブジェクトを参照することもできますが、ヘッダーを設定する方法があるようです。

どんな助けでも本当に感謝します

4

1 に答える 1

3

The way I approached it is by creating an instance of ApiClient in the application class and set a custom REST template.

In my case I was using Jackson for JSON message conversion:

RestTemplate restTemplate = new RestTemplate(fac);
MappingJacksonHttpMessageConverter converter =
        new MappingJacksonHttpMessageConverter();
converter.getObjectMapper().configure(Feature.UNWRAP_ROOT_VALUE, true);
restTemplate
        .getMessageConverters()
        .add(converter);
mClient.setRestTemplate(restTemplate);

My request factory fac then looks like this:

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

};

WARNING

Although this works on all Android devices in our office, I've recently discovered that headers don't appear to be added with all devices! I'm not sure why this is (or which devices specifically), but I'm looking in to it and will try to update this answer when I've found a resolution.

于 2012-09-14T08:30:23.740 に答える