Fixed bugs in standalone configuration to make it easier to integrate with existing MVC applications.
This commit is contained in:
@@ -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<S extends RepositoryExporterSupp
|
||||
return (S) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the {@link RepositoryExporter}s to use.
|
||||
*
|
||||
* @param repositoryExporter
|
||||
* @return
|
||||
*/
|
||||
@SuppressWarnings({"unchecked"})
|
||||
public S repositoryExporters(RepositoryExporter... repositoryExporter) {
|
||||
setRepositoryExporters(Arrays.asList(repositoryExporter));
|
||||
return (S) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find {@link RepositoryMetadata} for the {@link org.springframework.data.repository.Repository} exported under this
|
||||
* name.
|
||||
|
||||
@@ -3,6 +3,7 @@ package org.springframework.data.rest.webmvc;
|
||||
import java.util.List;
|
||||
import javax.persistence.EntityManagerFactory;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.orm.jpa.support.OpenEntityManagerInViewInterceptor;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
|
||||
@@ -12,10 +13,10 @@ import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandl
|
||||
*/
|
||||
public class RepositoryExporterHandlerMapping extends RequestMappingHandlerMapping {
|
||||
|
||||
@Autowired
|
||||
private EntityManagerFactory entityManagerFactory;
|
||||
|
||||
public RepositoryExporterHandlerMapping(EntityManagerFactory entityManagerFactory) {
|
||||
this.entityManagerFactory = entityManagerFactory;
|
||||
public RepositoryExporterHandlerMapping() {
|
||||
setOrder(Ordered.HIGHEST_PRECEDENCE);
|
||||
}
|
||||
|
||||
@@ -24,9 +25,11 @@ public class RepositoryExporterHandlerMapping extends RequestMappingHandlerMappi
|
||||
}
|
||||
|
||||
@Override protected void extendInterceptors(List<Object> interceptors) {
|
||||
OpenEntityManagerInViewInterceptor omivi = new OpenEntityManagerInViewInterceptor();
|
||||
omivi.setEntityManagerFactory(entityManagerFactory);
|
||||
interceptors.add(omivi);
|
||||
if (null != entityManagerFactory) {
|
||||
OpenEntityManagerInViewInterceptor omivi = new OpenEntityManagerInViewInterceptor();
|
||||
omivi.setEntityManagerFactory(entityManagerFactory);
|
||||
interceptors.add(omivi);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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<HttpMessageConverter<?>> httpMessageConverters = Collections.emptyList();
|
||||
@Autowired(required = false)
|
||||
private List<HttpMessageConverter> httpMessageConverters = new ArrayList<HttpMessageConverter>();
|
||||
private Map<String, Handler<Object, Object>> 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<HttpMessageConverter<?>> getHttpMessageConverters() {
|
||||
public List<HttpMessageConverter> getHttpMessageConverters() {
|
||||
return httpMessageConverters;
|
||||
}
|
||||
|
||||
public void setHttpMessageConverters(List<HttpMessageConverter<?>> httpMessageConverters) {
|
||||
public void setHttpMessageConverters(List<HttpMessageConverter> httpMessageConverters) {
|
||||
Assert.notNull(httpMessageConverters);
|
||||
this.httpMessageConverters = httpMessageConverters;
|
||||
}
|
||||
|
||||
public List<HttpMessageConverter<?>> httpMessageConverters() {
|
||||
public List<HttpMessageConverter> httpMessageConverters() {
|
||||
return httpMessageConverters;
|
||||
}
|
||||
|
||||
public RepositoryRestController httpMessageConverters(List<HttpMessageConverter<?>> httpMessageConverters) {
|
||||
public RepositoryRestController httpMessageConverters(List<HttpMessageConverter> httpMessageConverters) {
|
||||
setHttpMessageConverters(httpMessageConverters);
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -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<HttpMessageConverter<?>> httpMessageConverters = new ArrayList<HttpMessageConverter<?>>();
|
||||
|
||||
@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<String, String> mediaTypes = new HashMap<String, String>() {{
|
||||
put("json", "application/json");
|
||||
put("urilist", "text/uri-list");
|
||||
}};
|
||||
viewResolver.setMediaTypes(mediaTypes);
|
||||
Map<String, String> mediaTypes = new HashMap<String, String>() {{
|
||||
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.<ViewResolver>asList(jsonvr, urilistvr));
|
||||
|
||||
RepositoryRestViewResolver jsonvr = new RepositoryRestViewResolver(jsonView());
|
||||
RepositoryRestViewResolver urilistvr = new RepositoryRestViewResolver(urilistView());
|
||||
viewResolver.setViewResolvers(Arrays.<ViewResolver>asList(jsonvr, urilistvr));
|
||||
}
|
||||
return viewResolver;
|
||||
}
|
||||
|
||||
@Bean RepositoryRestController repositoryRestController() throws Exception {
|
||||
if (null == repositoryRestController) {
|
||||
this.repositoryRestController = new RepositoryRestController()
|
||||
.repositoryExporters(Arrays.<RepositoryExporter>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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user