#293 - HypermediaSupportBeanDefinitionRegistrar also augments RestTemplates.

We now also augment HttpMessageConverters for RestTemplate Spring beans.
This commit is contained in:
Oliver Gierke
2015-02-10 14:13:29 +01:00
parent 2945e9994f
commit 313afe1cc7
2 changed files with 26 additions and 0 deletions

View File

@@ -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;
}

View File

@@ -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<String, EntityLinks> 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