为 JPA Pageable 对象设置默认页面大小

新手上路,请多包涵

我有一个 PagingandSorting Repository,它有一个接受可分页对象的方法。我还有一个通过 URL 接受可分页对象的控制器。

我的用例是,如果用户在 URL 中指定了页面大小参数,我必须为可分页对象采用该值。如果他没有提到取默认值 50。

但是可分页对象现在默认为 20。

任何建议都会有所帮助

原文由 Kousick Shanmugam Nagaraj 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 898
1 个回答

如果您正在谈论 Spring Data PagingAndSortingRepository,您可以通过在 Controller 方法上使用 @PageableDefault 来设置默认页面大小,如下所示:

 public String listClients(@ModelAttribute FilterForm form, Model model, WebRequest request, @PageableDefault(sort = { "surname",
            "forename", "address.town" }, value = 50) Pageable pageable) {

    }

或者您可以在 Spring 配置中使用以下内容配置全局默认值,如下所示的 XML 和 Java 配置。

请注意,较新版本的 Spring Data 使用基于零的页面索引,而旧版本使用 1 作为第一页。如果您的 UI 分页库期望 1 作为第一页,那么您可以将 oneIndexedParameters 属性设置为 true

配置是否在请求参数中公开和假定基于 1 的页码索引。默认为 false,这意味着请求中的页码 0 等于第一页。如果设置为 true,则请求中的页码 1 将被视为第一页。

参数: oneIndexedParameters - 要设置的 oneIndexedParameters

如果在要解析的方法参数中找不到 PageableDefault 或 PageableDefaults(后者仅在旧模式中受支持),则将 Pageable 配置为用作回退。如果您将此设置为 null,请注意,如果在请求中找不到可分页数据,您的控制器方法将获得 null 传递给它们。请注意,这样做将需要您为请求提供页面和大小参数,因为任何可用参数都没有默认值。

参数: fallbackPageable - 用作一般回退的 Pageable。

在 XML 中,这看起来像下面这样:

 <mvc:annotation-driven>
    <mvc:argument-resolvers>
        <bean class="org.springframework.data.web.PageableHandlerMethodArgumentResolver">
            <property name="oneIndexedParameters" value="true"/>
            <property name="fallbackPageable">
                <bean class="org.springframework.data.domain.PageRequest">
                    <constructor-arg name="page" value="1" />
                    <constructor-arg name="size" value="10" />
                </bean>
            </property>
        </bean>
    </mvc:argument-resolvers>
</mvc:annotation-driven>

在 Java Config 中,它看起来像下面这样:

 @Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
        PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver();
        resolver.setOneIndexedParameters(true);
        resolver.setFallbackPageable(new PageRequest(1, 20));
        argumentResolvers.add(resolver);
        super.addArgumentResolvers(argumentResolvers);
    }
}

原文由 Alan Hay 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题