diff --git a/spring-data-rest-repository/src/main/java/org/springframework/data/rest/repository/RepositoryExporterSupport.java b/spring-data-rest-repository/src/main/java/org/springframework/data/rest/repository/RepositoryExporterSupport.java index b5b75ca4f..e1710362d 100644 --- a/spring-data-rest-repository/src/main/java/org/springframework/data/rest/repository/RepositoryExporterSupport.java +++ b/spring-data-rest-repository/src/main/java/org/springframework/data/rest/repository/RepositoryExporterSupport.java @@ -1,5 +1,6 @@ package org.springframework.data.rest.repository; +import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -54,6 +55,18 @@ public abstract class RepositoryExporterSupport interceptors) { - OpenEntityManagerInViewInterceptor omivi = new OpenEntityManagerInViewInterceptor(); - omivi.setEntityManagerFactory(entityManagerFactory); - interceptors.add(omivi); + if (null != entityManagerFactory) { + OpenEntityManagerInViewInterceptor omivi = new OpenEntityManagerInViewInterceptor(); + omivi.setEntityManagerFactory(entityManagerFactory); + interceptors.add(omivi); + } } } diff --git a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositoryRestController.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositoryRestController.java index 6006fb6cf..cb7c21c68 100644 --- a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositoryRestController.java +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositoryRestController.java @@ -25,6 +25,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactoryUtils; import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.core.convert.ConversionService; @@ -62,8 +63,12 @@ import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.http.converter.ByteArrayHttpMessageConverter; +import org.springframework.http.converter.FormHttpMessageConverter; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.http.converter.StringHttpMessageConverter; +import org.springframework.http.converter.json.MappingJacksonHttpMessageConverter; import org.springframework.http.server.ServerHttpRequest; import org.springframework.ui.ExtendedModelMap; import org.springframework.ui.Model; @@ -100,14 +105,23 @@ public class RepositoryRestController private ApplicationContext applicationContext; private MediaType uriListMediaType = MediaType.parseMediaType("text/uri-list"); - private MediaType jsonMediaType = MediaType.parseMediaType("application/x-spring-data+json"); + private MediaType jsonMediaType = MediaType.parseMediaType("application/json"); + @Autowired(required = false) private DelegatingConversionService conversionService = new DelegatingConversionService( new DefaultFormattingConversionService() ); - private List> httpMessageConverters = Collections.emptyList(); + @Autowired(required = false) + private List httpMessageConverters = new ArrayList(); private Map> resourceHandlers = Collections.emptyMap(); private ObjectMapper objectMapper = new ObjectMapper(); + { + httpMessageConverters.add(0, new StringHttpMessageConverter()); + httpMessageConverters.add(0, new ByteArrayHttpMessageConverter()); + httpMessageConverters.add(0, new FormHttpMessageConverter()); + httpMessageConverters.add(0, new MappingJacksonHttpMessageConverter()); + } + @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } @@ -131,20 +145,20 @@ public class RepositoryRestController return this; } - public List> getHttpMessageConverters() { + public List getHttpMessageConverters() { return httpMessageConverters; } - public void setHttpMessageConverters(List> httpMessageConverters) { + public void setHttpMessageConverters(List httpMessageConverters) { Assert.notNull(httpMessageConverters); this.httpMessageConverters = httpMessageConverters; } - public List> httpMessageConverters() { + public List httpMessageConverters() { return httpMessageConverters; } - public RepositoryRestController httpMessageConverters(List> httpMessageConverters) { + public RepositoryRestController httpMessageConverters(List httpMessageConverters) { setHttpMessageConverters(httpMessageConverters); return this; } diff --git a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositoryRestMvcConfiguration.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositoryRestMvcConfiguration.java index 8ae3e1524..d3b0d2662 100644 --- a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositoryRestMvcConfiguration.java +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositoryRestMvcConfiguration.java @@ -1,21 +1,16 @@ package org.springframework.data.rest.webmvc; -import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; -import java.util.List; import java.util.Map; -import javax.persistence.EntityManagerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportResource; import org.springframework.core.Ordered; -import org.springframework.data.rest.repository.RepositoryExporter; import org.springframework.data.rest.repository.context.ValidatingRepositoryEventListener; import org.springframework.data.rest.repository.jpa.JpaRepositoryExporter; -import org.springframework.http.converter.HttpMessageConverter; import org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.view.ContentNegotiatingViewResolver; @@ -27,38 +22,12 @@ import org.springframework.web.servlet.view.ContentNegotiatingViewResolver; @ImportResource("classpath*:META-INF/spring-data-rest/**/*-export.xml") public class RepositoryRestMvcConfiguration { - ContentNegotiatingViewResolver viewResolver; - RepositoryRestController repositoryRestController; - - @Autowired - EntityManagerFactory entityManagerFactory; - @Autowired(required = false) JpaRepositoryExporter customJpaRepositoryExporter; - @Autowired(required = false) - List> httpMessageConverters = new ArrayList>(); - @Autowired(required = false) ValidatingRepositoryEventListener validatingRepositoryEventListener; - RepositoryExporterHandlerAdapter repositoryExporterHandlerAdapter; - RepositoryExporterHandlerMapping repositoryExporterHandlerMapping; - - @Bean RepositoryExporterHandlerAdapter repositoryExporterHandlerAdapter() { - if (null == repositoryExporterHandlerAdapter) { - repositoryExporterHandlerAdapter = new RepositoryExporterHandlerAdapter(); - } - return repositoryExporterHandlerAdapter; - } - - @Bean RepositoryExporterHandlerMapping repositoryExporterHandlerMapping() { - if (null == repositoryExporterHandlerMapping) { - repositoryExporterHandlerMapping = new RepositoryExporterHandlerMapping(entityManagerFactory); - } - return repositoryExporterHandlerMapping; - } - @Bean PersistenceAnnotationBeanPostProcessor persistenceAnnotationBeanPostProcessor() { return new PersistenceAnnotationBeanPostProcessor(); } @@ -88,31 +57,32 @@ public class RepositoryRestMvcConfiguration { } @Bean ContentNegotiatingViewResolver contentNegotiatingViewResolver() { - if (null == viewResolver) { - viewResolver = new ContentNegotiatingViewResolver(); - viewResolver.setOrder(Ordered.HIGHEST_PRECEDENCE); + ContentNegotiatingViewResolver viewResolver = new ContentNegotiatingViewResolver(); + viewResolver.setOrder(Ordered.HIGHEST_PRECEDENCE); - Map mediaTypes = new HashMap() {{ - put("json", "application/json"); - put("urilist", "text/uri-list"); - }}; - viewResolver.setMediaTypes(mediaTypes); + Map mediaTypes = new HashMap() {{ + put("json", "application/json"); + put("urilist", "text/uri-list"); + }}; + viewResolver.setMediaTypes(mediaTypes); + + RepositoryRestViewResolver jsonvr = new RepositoryRestViewResolver(jsonView()); + RepositoryRestViewResolver urilistvr = new RepositoryRestViewResolver(urilistView()); + viewResolver.setViewResolvers(Arrays.asList(jsonvr, urilistvr)); - RepositoryRestViewResolver jsonvr = new RepositoryRestViewResolver(jsonView()); - RepositoryRestViewResolver urilistvr = new RepositoryRestViewResolver(urilistView()); - viewResolver.setViewResolvers(Arrays.asList(jsonvr, urilistvr)); - } return viewResolver; } @Bean RepositoryRestController repositoryRestController() throws Exception { - if (null == repositoryRestController) { - this.repositoryRestController = new RepositoryRestController() - .repositoryExporters(Arrays.asList(jpaRepositoryExporter())) - .httpMessageConverters(repositoryExporterHandlerAdapter().getMessageConverters()) - .jsonMediaType("application/json"); - } - return repositoryRestController; + return new RepositoryRestController(); + } + + @Bean RepositoryExporterHandlerAdapter repositoryExporterHandlerAdapter() { + return new RepositoryExporterHandlerAdapter(); + } + + @Bean RepositoryExporterHandlerMapping repositoryExporterHandlerMapping() { + return new RepositoryExporterHandlerMapping(); } }