Include an 'Accept' header for Content-Type in requests

We always expect a Content-Type of 'application/json' with a charset of
UTF-8, so we should include that in our request headers. Also improve
the response parsing to use the ContentType helper and ignore case for
compatibility with newer Elasticsearch versions.

Change-Id: I11984a49f0487dc1b8c979c503d3124cf3aa9c50
diff --git a/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java b/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java
index 482868c..58a53b1 100644
--- a/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java
+++ b/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java
@@ -278,9 +278,9 @@
 
   protected boolean hasErrors(Response response) {
     try {
-      String contentType = response.getEntity().getContentType().getValue();
+      ContentType contentType = ContentType.get(response.getEntity());
       Preconditions.checkState(
-          contentType.equals(ContentType.APPLICATION_JSON.toString()),
+          contentType.toString().equalsIgnoreCase(ContentType.APPLICATION_JSON.toString()),
           String.format("Expected %s, but was: %s", ContentType.APPLICATION_JSON, contentType));
       String responseStr = EntityUtils.toString(response.getEntity());
       JsonObject responseJson = (JsonObject) new JsonParser().parse(responseStr);
diff --git a/src/main/java/com/google/gerrit/elasticsearch/ElasticRestClientProvider.java b/src/main/java/com/google/gerrit/elasticsearch/ElasticRestClientProvider.java
index b41f365..85764f1 100644
--- a/src/main/java/com/google/gerrit/elasticsearch/ElasticRestClientProvider.java
+++ b/src/main/java/com/google/gerrit/elasticsearch/ElasticRestClientProvider.java
@@ -22,14 +22,17 @@
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
 import java.io.IOException;
+import org.apache.http.Header;
 import org.apache.http.HttpStatus;
 import org.apache.http.StatusLine;
 import org.apache.http.auth.AuthScope;
 import org.apache.http.auth.UsernamePasswordCredentials;
 import org.apache.http.client.CredentialsProvider;
 import org.apache.http.client.config.RequestConfig;
+import org.apache.http.entity.ContentType;
 import org.apache.http.impl.client.BasicCredentialsProvider;
 import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
+import org.apache.http.message.BasicHeader;
 import org.elasticsearch.client.Request;
 import org.elasticsearch.client.Response;
 import org.elasticsearch.client.RestClient;
@@ -129,6 +132,8 @@
 
   private RestClient build() {
     RestClientBuilder builder = RestClient.builder(cfg.getHosts());
+    builder.setDefaultHeaders(
+        new Header[] {new BasicHeader("Accept", ContentType.APPLICATION_JSON.toString())});
     setConfiguredTimeouts(builder);
     setConfiguredCredentialsIfAny(builder);
     return builder.build();