diff --git a/spring-vault-core/src/main/java/org/springframework/vault/client/VaultClients.java b/spring-vault-core/src/main/java/org/springframework/vault/client/VaultClients.java
index 32246e2f..7ac5f8f5 100644
--- a/spring-vault-core/src/main/java/org/springframework/vault/client/VaultClients.java
+++ b/spring-vault-core/src/main/java/org/springframework/vault/client/VaultClients.java
@@ -17,6 +17,8 @@ package org.springframework.vault.client;
import java.io.IOException;
import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
import org.springframework.http.HttpRequest;
@@ -24,6 +26,10 @@ import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;
+import org.springframework.http.converter.ByteArrayHttpMessageConverter;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.StringHttpMessageConverter;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.DefaultUriTemplateHandler;
@@ -46,18 +52,50 @@ public class VaultClients {
* request body size that is required to send a
* {@link org.springframework.http.HttpHeaders#CONTENT_LENGTH} request header.
* Otherwise, Vault will deny body processing.
+ *
+ * Requires Jackson 2 for Object-to-JSON mapping.
*
* @param endpoint must not be {@literal null}.
* @param requestFactory must not be {@literal null}.
* @return the {@link RestTemplate}.
* @see org.springframework.http.client.Netty4ClientHttpRequestFactory
+ * @see MappingJackson2HttpMessageConverter
*/
public static RestTemplate createRestTemplate(VaultEndpoint endpoint,
ClientHttpRequestFactory requestFactory) {
- RestTemplate restTemplate = new RestTemplate(requestFactory);
+ RestTemplate restTemplate = createRestTemplate();
+ restTemplate.setRequestFactory(requestFactory);
restTemplate.setUriTemplateHandler(createUriTemplateHandler(endpoint));
+
+ return restTemplate;
+ }
+
+ /**
+ * Create a {@link RestTemplate} for Vault interaction. {@link RestTemplate} is
+ * configured with a {@link ClientHttpRequestInterceptor} to enforce serialization to
+ * a byte array prior continuing the request. Eager serialization leads to a known
+ * request body size that is required to send a
+ * {@link org.springframework.http.HttpHeaders#CONTENT_LENGTH} request header.
+ * Otherwise, Vault will deny body processing.
+ *
+ * Requires Jackson 2 for Object-to-JSON mapping.
+ *
+ * @return the {@link RestTemplate}.
+ * @see org.springframework.http.client.Netty4ClientHttpRequestFactory
+ * @see MappingJackson2HttpMessageConverter
+ */
+ public static RestTemplate createRestTemplate() {
+
+ List> messageConverters = new ArrayList>(
+ 3);
+ messageConverters.add(new ByteArrayHttpMessageConverter());
+ messageConverters.add(new StringHttpMessageConverter());
+ messageConverters.add(new MappingJackson2HttpMessageConverter());
+
+ RestTemplate restTemplate = new RestTemplate(messageConverters);
+
restTemplate.getInterceptors().add(new ClientHttpRequestInterceptor() {
@Override
diff --git a/spring-vault-core/src/test/java/org/springframework/vault/authentication/AppIdAuthenticationUnitTests.java b/spring-vault-core/src/test/java/org/springframework/vault/authentication/AppIdAuthenticationUnitTests.java
index 4157914c..a602a471 100644
--- a/spring-vault-core/src/test/java/org/springframework/vault/authentication/AppIdAuthenticationUnitTests.java
+++ b/spring-vault-core/src/test/java/org/springframework/vault/authentication/AppIdAuthenticationUnitTests.java
@@ -22,6 +22,7 @@ import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.test.web.client.MockRestServiceServer;
import org.springframework.vault.VaultException;
+import org.springframework.vault.client.VaultClients;
import org.springframework.vault.client.VaultClients.PrefixAwareUriTemplateHandler;
import org.springframework.vault.support.VaultToken;
import org.springframework.web.client.RestTemplate;
@@ -46,7 +47,7 @@ public class AppIdAuthenticationUnitTests {
@Before
public void before() throws Exception {
- RestTemplate restTemplate = new RestTemplate();
+ RestTemplate restTemplate = VaultClients.createRestTemplate();
restTemplate.setUriTemplateHandler(new PrefixAwareUriTemplateHandler());
this.mockRest = MockRestServiceServer.createServer(restTemplate);
this.restTemplate = restTemplate;
diff --git a/spring-vault-core/src/test/java/org/springframework/vault/authentication/AppRoleAuthenticationUnitTests.java b/spring-vault-core/src/test/java/org/springframework/vault/authentication/AppRoleAuthenticationUnitTests.java
index f9230cc1..2e8a3d5b 100644
--- a/spring-vault-core/src/test/java/org/springframework/vault/authentication/AppRoleAuthenticationUnitTests.java
+++ b/spring-vault-core/src/test/java/org/springframework/vault/authentication/AppRoleAuthenticationUnitTests.java
@@ -22,6 +22,7 @@ import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.test.web.client.MockRestServiceServer;
import org.springframework.vault.VaultException;
+import org.springframework.vault.client.VaultClients;
import org.springframework.vault.client.VaultClients.PrefixAwareUriTemplateHandler;
import org.springframework.vault.support.VaultToken;
import org.springframework.web.client.RestTemplate;
@@ -46,7 +47,7 @@ public class AppRoleAuthenticationUnitTests {
@Before
public void before() throws Exception {
- RestTemplate restTemplate = new RestTemplate();
+ RestTemplate restTemplate = VaultClients.createRestTemplate();
restTemplate.setUriTemplateHandler(new PrefixAwareUriTemplateHandler());
this.mockRest = MockRestServiceServer.createServer(restTemplate);
diff --git a/spring-vault-core/src/test/java/org/springframework/vault/authentication/AwsEc2AuthenticationUnitTests.java b/spring-vault-core/src/test/java/org/springframework/vault/authentication/AwsEc2AuthenticationUnitTests.java
index 4fca3530..8e619348 100644
--- a/spring-vault-core/src/test/java/org/springframework/vault/authentication/AwsEc2AuthenticationUnitTests.java
+++ b/spring-vault-core/src/test/java/org/springframework/vault/authentication/AwsEc2AuthenticationUnitTests.java
@@ -25,6 +25,7 @@ import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.test.web.client.MockRestServiceServer;
import org.springframework.vault.VaultException;
+import org.springframework.vault.client.VaultClients;
import org.springframework.vault.client.VaultClients.PrefixAwareUriTemplateHandler;
import org.springframework.vault.support.VaultToken;
import org.springframework.web.client.RestTemplate;
@@ -49,7 +50,7 @@ public class AwsEc2AuthenticationUnitTests {
@Before
public void before() throws Exception {
- RestTemplate restTemplate = new RestTemplate();
+ RestTemplate restTemplate = VaultClients.createRestTemplate();
restTemplate.setUriTemplateHandler(new PrefixAwareUriTemplateHandler());
this.mockRest = MockRestServiceServer.createServer(restTemplate);
diff --git a/spring-vault-core/src/test/java/org/springframework/vault/authentication/ClientCertificateAuthenticationUnitTests.java b/spring-vault-core/src/test/java/org/springframework/vault/authentication/ClientCertificateAuthenticationUnitTests.java
index 3a38100a..bd13d6be 100644
--- a/spring-vault-core/src/test/java/org/springframework/vault/authentication/ClientCertificateAuthenticationUnitTests.java
+++ b/spring-vault-core/src/test/java/org/springframework/vault/authentication/ClientCertificateAuthenticationUnitTests.java
@@ -22,6 +22,7 @@ import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.test.web.client.MockRestServiceServer;
import org.springframework.vault.VaultException;
+import org.springframework.vault.client.VaultClients;
import org.springframework.vault.client.VaultClients.PrefixAwareUriTemplateHandler;
import org.springframework.vault.support.VaultToken;
import org.springframework.web.client.RestTemplate;
@@ -45,7 +46,7 @@ public class ClientCertificateAuthenticationUnitTests {
@Before
public void before() throws Exception {
- RestTemplate restTemplate = new RestTemplate();
+ RestTemplate restTemplate = VaultClients.createRestTemplate();
restTemplate.setUriTemplateHandler(new PrefixAwareUriTemplateHandler());
this.mockRest = MockRestServiceServer.createServer(restTemplate);