diff --git a/src/main/java/org/springframework/hateoas/config/HypermediaSupportBeanDefinitionRegistrar.java b/src/main/java/org/springframework/hateoas/config/HypermediaSupportBeanDefinitionRegistrar.java index 6bcc960b..b4f85a8b 100644 --- a/src/main/java/org/springframework/hateoas/config/HypermediaSupportBeanDefinitionRegistrar.java +++ b/src/main/java/org/springframework/hateoas/config/HypermediaSupportBeanDefinitionRegistrar.java @@ -59,6 +59,7 @@ import org.springframework.http.converter.json.MappingJackson2HttpMessageConvert import org.springframework.plugin.core.PluginRegistry; import org.springframework.plugin.core.support.PluginRegistryFactoryBean; import org.springframework.util.ClassUtils; +import org.springframework.web.client.RestTemplate; import org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter; @@ -249,6 +250,12 @@ class HypermediaSupportBeanDefinitionRegistrar implements ImportBeanDefinitionRe .setMessageConverters(augmentedConverters.toArray(new HttpMessageConverter[augmentedConverters.size()])); } + if (bean instanceof RestTemplate) { + + RestTemplate template = (RestTemplate) bean; + template.setMessageConverters(potentiallyRegisterModule(template.getMessageConverters())); + } + return bean; } diff --git a/src/test/java/org/springframework/hateoas/config/EnableHypermediaSupportIntegrationTest.java b/src/test/java/org/springframework/hateoas/config/EnableHypermediaSupportIntegrationTest.java index 2d9cda98..5c31efc4 100644 --- a/src/test/java/org/springframework/hateoas/config/EnableHypermediaSupportIntegrationTest.java +++ b/src/test/java/org/springframework/hateoas/config/EnableHypermediaSupportIntegrationTest.java @@ -45,6 +45,7 @@ import org.springframework.hateoas.mvc.TypeConstrainedMappingJackson2HttpMessage import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.test.util.ReflectionTestUtils; +import org.springframework.web.client.RestTemplate; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter; import org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver; @@ -118,6 +119,19 @@ public class EnableHypermediaSupportIntegrationTest { assertThat(found, is(true)); } + /** + * @see #293 + */ + @Test + public void registersHttpMessageConvertersForRestTemplate() { + + AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(HalConfig.class); + RestTemplate template = context.getBean(RestTemplate.class); + + assertThat(template.getMessageConverters().get(0).getSupportedMediaTypes(), hasItem(MediaTypes.HAL_JSON)); + context.close(); + } + private static void assertEntityLinksSetUp(ApplicationContext context) { Map discoverers = context.getBeansOfType(EntityLinks.class); @@ -167,6 +181,11 @@ public class EnableHypermediaSupportIntegrationTest { numberOfMessageConvertersLegacy = adapter.getMessageConverters().length; return adapter; } + + @Bean + public RestTemplate restTemplate() { + return new RestTemplate(); + } } @Configuration