使用ClientHttpRequestInterceptor的RestTemplate会导致两次GZIP压缩

时间:2014-11-20 18:44:11

标签: android spring resttemplate spring-android

我正在使用ClientHttpRequestInterceptor为我的Android项目中的RestTemplate发出的每个请求添加一个Basic Authorization标头。 我也通过将Content-Encoding标头设置为“gzip”来压缩请求体 将Interceptor添加到RestTemplate会导致request.execute方法被调用两次;压缩身体两次。

拦截器:

public class BasicAuthRequestInterceptor implements ClientHttpRequestInterceptor {

/** The base64 encoded credentials */
private final String encodedCredentials;

public BasicAuthRequestInterceptor(final String username, final String password) {
    this.encodedCredentials = new String(Base64.encodeBytes((username + ":" + password).getBytes()));
}

@Override
public ClientHttpResponse intercept(final HttpRequest request, final byte[] body,
        final ClientHttpRequestExecution execution) throws IOException {

    HttpHeaders headers = request.getHeaders();
    headers.add("Authorization", "Basic " + this.encodedCredentials);

    return execution.execute(request, body);
}

}

RestTemplate设置:

// Create a new rest template
final RestTemplate restTemplate = new RestTemplate(requestFactory);

// Add authorisation interceptor
final List<ClientHttpRequestInterceptor> interceptors = new ArrayList<ClientHttpRequestInterceptor>();
interceptors.add(new BasicAuthRequestInterceptor(HTTP_AUTH_USERNAME, HTTP_AUTH_PASSWORD));
restTemplate.setInterceptors(interceptors);

我不认为这是预期的行为,我没有发现其他人报告此问题,因此我的拦截器实现有问题吗? 我可以通过在我设置Authorization标头的位置设置Content-Encoding标头来解决此问题,但这是不可取的

这是使用spring-android-rest-template依赖的版本1.0.1.RELEASE。

0 个答案:

没有答案