RestTemplate com ClientHttpRequestInterceptor causa a compactação GZIP duas vezes
Estou usando um ClientHttpRequestInterceptor para adicionar um cabeçalho de Autorização Básica a cada solicitação feita pelo RestTemplate no meu projeto Android. Também estou compactando o corpo da solicitação, configurando o cabeçalho de codificação de conteúdo como "gzip". Adicionar um interceptor ao RestTemplate faz com que o método request.execute seja chamado duas vezes; comprimir o corpo duas vezes.
Interceptor:
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);
}
}
Configuração 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);
Eu não acho que esse seja o comportamento esperado e não encontrei mais ninguém relatando esse problema. Existe algum problema com a implementação do Interceptor? Posso solucionar o problema configurando o cabeçalho de codificação de conteúdo no ponto em que defini o cabeçalho de autorização, mas isso não é desejável
Isso está usando a versão 1.0.1.RELEASE da dependência spring-android-rest-template.