From 93202f369648c20b3207f091d3c115cb10a5e953 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Tue, 20 Jan 2015 10:39:21 +0100 Subject: [PATCH] DATAREST-460 - Polished RepositoryRestMvcConfiguration to fix CGLib proxying. Made private methods that call @Bean methods protected so that they can become subject to CGLib proxying. Inlined getDefaultedRelProvider(). --- .../RepositoryRestMvcConfiguration.java | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.java index cf4b08acb..4e4c36580 100644 --- a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.java +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.java @@ -224,7 +224,7 @@ public class RepositoryRestMvcConfiguration extends HateoasAwareSpringDataWebCon ProjectionDefinitionConfiguration configuration = new ProjectionDefinitionConfiguration(); - for (Class projection : getProjections()) { + for (Class projection : getProjections(repositories())) { configuration.addProjection(projection); } @@ -433,7 +433,9 @@ public class RepositoryRestMvcConfiguration extends HateoasAwareSpringDataWebCon @Bean public ObjectMapper halObjectMapper() { - HalHandlerInstantiator instantiator = new HalHandlerInstantiator(getDefaultedRelProvider(), curieProvider); + RelProvider defaultedRelProvider = this.relProvider != null ? this.relProvider : new EvoInflectorRelProvider(); + + HalHandlerInstantiator instantiator = new HalHandlerInstantiator(defaultedRelProvider, curieProvider); ObjectMapper mapper = basicObjectMapper(); mapper.registerModule(persistentEntityJackson2Module()); @@ -521,7 +523,7 @@ public class RepositoryRestMvcConfiguration extends HateoasAwareSpringDataWebCon * * @return */ - private Module persistentEntityJackson2Module() { + protected Module persistentEntityJackson2Module() { PersistentEntities entities = persistentEntities(); @@ -620,7 +622,7 @@ public class RepositoryRestMvcConfiguration extends HateoasAwareSpringDataWebCon return OrderAwarePluginRegistry.create(converters); } - private List defaultMethodArgumentResolvers() { + protected List defaultMethodArgumentResolvers() { PersistentEntityResourceAssemblerArgumentResolver peraResolver = new PersistentEntityResourceAssemblerArgumentResolver( repositories(), entityLinks(), config().projectionConfiguration(), new ProxyProjectionFactory(beanFactory), @@ -638,15 +640,15 @@ public class RepositoryRestMvcConfiguration extends HateoasAwareSpringDataWebCon @Autowired GeoModule geoModule; - private ObjectMapper basicObjectMapper() { + protected ObjectMapper basicObjectMapper() { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true); objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - objectMapper.registerModule(geoModule); + Jackson2DatatypeHelper.configureObjectMapper(objectMapper); // Configure custom Modules configureJacksonObjectMapper(objectMapper); @@ -654,16 +656,12 @@ public class RepositoryRestMvcConfiguration extends HateoasAwareSpringDataWebCon return objectMapper; } - private RelProvider getDefaultedRelProvider() { - return this.relProvider != null ? relProvider : new EvoInflectorRelProvider(); - } - @SuppressWarnings("unchecked") - private Set> getProjections() { + private Set> getProjections(Repositories repositories) { Set packagesToScan = new HashSet(); - for (Class domainType : repositories()) { + for (Class domainType : repositories) { packagesToScan.add(domainType.getPackage().getName()); }