我有一个简单的控制器动作:
public class CategoriesController
{
@RequestMapping(value = { "/", "" })
public String list(
Model model,
@PageableDefault(size = CategoriesController.PAGE_LIMIT) Pageable pager
)
{
// load page data
Page<Category> page = this.categoryService.findAll(pager);
/* action logic here */
}
}下面是我的pom.xml片段:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
<version>1.6.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.5.0.RELEASE</version>
</dependency>在将这个添加到我的applicationContext.xml之后
<bean class="org.springframework.data.web.config.SpringDataWebConfiguration"/>我有以下错误:
org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.data.domain.Pageable]: Specified class is an interfaceSpring数据本身运行良好,JPA存储库也运行良好。但到目前为止,我在控制器中使用了手工编写的分页(我自己计算页面,手动创建PageRequest对象)。我想使用Spring Data web附加软件,但由于某些原因,它们对我不起作用……手动注册过时的org.springframework.data.web.PageableArgumentResolver部分地让它工作了,但不是完全的,但我仍然认为这不应该是一个解决方案。
在org.springframework上启用调试记录器后,我看到:
01:37:33.850 [localhost-startStop-1] DEBUG org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader - Registering bean definition for @Bean method org.springframework.data.web.config.SpringDataWebConfiguration.pageableResolver()所以它是注册的-你知道为什么它不能工作吗?
发布于 2014-03-03 18:17:37
您的问题是,您试图混合使用XML配置和基于Java Config的配置。在这种特殊情况下,这是行不通的。configuration类中的bean将被实例化,但仅此而已,它们没有注册到您的<mvc:annotation-driven />配置中。
您必须手动将bean添加到ConversionService和RequestMappingHandlerMapping中。要么是我们的切换,至少是将您的DispatcherServlet配置转换为Java Config。
在可扩展标记语言中,可以使用<mvc:argument-resolvers />标记配置额外的参数解析器。(这模拟了SpringDataWebConfiguration中的配置)。
<mvc:annotation-driven>
<mvc:argument-resolvers>
<ref bean="sortResolver"/>
<ref bean="pageableResolver" />
</mvc:argument-resolvers>
</mvc:annotation-driven>
<bean id="sortResolver" class="org.springframework.data.web.SortHandlerMethodArgumentResolver" />
<bean id="pageableResolver" class="org.springframework.data.web.PageableHandlerMethodArgumentResolver">
<constructor-arg ref="sortResolver" />
</bean>但是,除了这两个解析器之外,SpringDataWebConfiguration还会注册一个DomainClassConverter。如果你也想使用它,你需要一些额外的配置。
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" />
<bean class="org.springframework.data.repository.support.DomainClassConverter">
<constructor-arg ref="conversionService" />
</bean>
<mvc:annotation-driven conversion-service="conversionService">
<mvc:argument-resolvers>
<ref bean="sortResolver"/>
<ref bean="pageableResolver" />
</mvc:argument-resolvers>
</mvc:annotation-driven>
<bean id="sortResolver" class="org.springframework.data.web.SortHandlerMethodArgumentResolver" />
<bean id="pageableResolver" class="org.springframework.data.web.PageableHandlerMethodArgumentResolver">
<constructor-arg ref="sortResolver" />
</bean>发布于 2014-08-19 17:36:23
或者,您可以将其添加到用户ApplicationContext
<mvc:annotation-driven>
<mvc:argument-resolvers>
<bean class="org.springframework.data.web.PageableHandlerMethodArgumentResolver" />
</mvc:argument-resolvers>
</mvc:annotation-driven>它将与Spring4一起工作
https://stackoverflow.com/questions/22135002
复制相似问题