I've faced the same issue, and solved it like following :
1) Switched to spring-data-rest-webmvc 1.1.0.M1
2) Split your context configuration to web-config and rest-config
WebConfig.java
@Configuration
@EnableHypermediaSupport
@EnableSpringDataWebSupport
@EnableWebMvc
@ComponentScan(basePackages = {"com.yourcompanyname.XXX"})
public class WebConfig extends WebMvcConfigurationSupport {
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass( JstlView.class );
viewResolver.setPrefix( "/WEB-INF/views/" );
viewResolver.setSuffix( ".jsp" );
return viewResolver;
}
@Bean
public ReloadableResourceBundleMessageSource messageSource()
{
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename( "/resources/messages" );
messageSource.setCacheSeconds( 0 );
return messageSource;
}
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.defaultContentType(MediaType.APPLICATION_JSON);
}
@Override
@Bean
public RequestMappingHandlerMapping requestMappingHandlerMapping() {
RequestMappingHandlerMapping handlerMapping = new RequestMappingHandlerMapping() {
@Override
protected boolean isHandler(Class<?> beanType) {
return beanType == null || ClassUtils.getPackageName(beanType).startsWith("org.springframework.data") ? false
: super.isHandler(beanType);
}
};
handlerMapping.setOrder(0);
handlerMapping.setInterceptors(getInterceptors());
handlerMapping.setContentNegotiationManager(mvcContentNegotiationManager());
return handlerMapping;
}
@Override
@Bean
public HandlerMapping resourceHandlerMapping() {
AbstractHandlerMapping handlerMapping = (AbstractHandlerMapping) super.resourceHandlerMapping();
handlerMapping.setOrder(-1);
return handlerMapping;
}
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/").setCachePeriod(31556926);
}
RESTConfig.java
@Configuration
public class RESTConfig extends RepositoryRestMvcConfiguration {
}
Then create webapp initializer classes which replaces registration in web.xml (servlet-api 3.0+ required). In following example spring-data-rest path is set to /rest/, also included JPA configuration class for my own proposes. We will register 2 servlets in 2 separate classes, one for main "/" and one for "/rest/" path :
WebAppInitializer.java
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
/*
* (non-Javadoc)
* @see org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer#getRootConfigClasses()
*/
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[] { JpaConfig.class };
}
/*
* (non-Javadoc)
* @see org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer#getServletConfigClasses()
*/
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[] { WebConfig.class };
}
/*
* (non-Javadoc)
* @see org.springframework.web.servlet.support.AbstractDispatcherServletInitializer#getServletMappings()
*/
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
/*
* (non-Javadoc)
* @see org.springframework.web.servlet.support.AbstractDispatcherServletInitializer#getServletFilters()
*/
@Override
protected javax.servlet.Filter[] getServletFilters() {
return new javax.servlet.Filter[] { new OpenEntityManagerInViewFilter() };
}
}
RestAppConfig.java
public class RestAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
/*
* (non-Javadoc)
* @see org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer#getRootConfigClasses()
*/
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[] { JpaConfig.class };
}
/*
* (non-Javadoc)
* @see org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer#getServletConfigClasses()
*/
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[] { RESTConfig.class };
}
/*
* (non-Javadoc)
* @see org.springframework.web.servlet.support.AbstractDispatcherServletInitializer#getServletMappings()
*/
@Override
protected String[] getServletMappings() {
return new String[] { "/rest/*" };
}
/*
* (non-Javadoc)
* @see org.springframework.web.servlet.support.AbstractDispatcherServletInitializer#getServletFilters()
*/
@Override
protected javax.servlet.Filter[] getServletFilters() {
return new javax.servlet.Filter[] { new OpenEntityManagerInViewFilter() };
}
}