首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Data不处理可分页操作参数的创建

问Spring Data不处理可分页操作参数的创建
EN

Stack Overflow用户
提问于 2014-03-03 07:15:20
回答 2查看 10.9K关注 0票数 12

我有一个简单的控制器动作:

代码语言:javascript
复制
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片段:

代码语言:javascript
复制
    <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之后

代码语言:javascript
复制
<bean class="org.springframework.data.web.config.SpringDataWebConfiguration"/>

我有以下错误:

代码语言:javascript
复制
org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.data.domain.Pageable]: Specified class is an interface

Spring数据本身运行良好,JPA存储库也运行良好。但到目前为止,我在控制器中使用了手工编写的分页(我自己计算页面,手动创建PageRequest对象)。我想使用Spring Data web附加软件,但由于某些原因,它们对我不起作用……手动注册过时的org.springframework.data.web.PageableArgumentResolver部分地让它工作了,但不是完全的,但我仍然认为这不应该是一个解决方案。

在org.springframework上启用调试记录器后,我看到:

代码语言:javascript
复制
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()

所以它是注册的-你知道为什么它不能工作吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-03 18:17:37

您的问题是,您试图混合使用XML配置和基于Java Config的配置。在这种特殊情况下,这是行不通的。configuration类中的bean将被实例化,但仅此而已,它们没有注册到您的<mvc:annotation-driven />配置中。

您必须手动将bean添加到ConversionService和RequestMappingHandlerMapping中。要么是我们的切换,至少是将您的DispatcherServlet配置转换为Java Config。

在可扩展标记语言中,可以使用<mvc:argument-resolvers />标记配置额外的参数解析器。(这模拟了SpringDataWebConfiguration中的配置)。

代码语言:javascript
复制
<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。如果你也想使用它,你需要一些额外的配置。

代码语言:javascript
复制
<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>
票数 19
EN

Stack Overflow用户

发布于 2014-08-19 17:36:23

或者,您可以将其添加到用户ApplicationContext

代码语言:javascript
复制
<mvc:annotation-driven>
    <mvc:argument-resolvers>
        <bean class="org.springframework.data.web.PageableHandlerMethodArgumentResolver" />
    </mvc:argument-resolvers>
</mvc:annotation-driven>

它将与Spring4一起工作

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22135002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档