设置JPA Pageable Object的默认页面大小

Kou*_*raj 19 spring jpa spring-mvc spring-data-jpa

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

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

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

任何建议都会有所帮助

Ala*_*Hay 47

如果您正在讨论Spring Data PagingAndSortingRepository,则可以使用@PageableDefaultController方法设置默认页面大小,如下所示:

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

    }
Run Code Online (Sandbox Code Playgroud)

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

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

配置是否在请求参数中公开和假设基于1的页码索引.默认为false,表示请求中的页码0等于第一页.如果将其设置为true,则请求中的页码1将被视为第一页.

参数:oneIndexedParameters - 要设置的oneIndexedParameters

如果没有PageableDefault或PageableDefaults(后者仅在传统模式下支持)可以在要解析的方法参数中找到,则将Pageable配置为用作后备.如果将此参数设置为null,请注意,如果在请求中找不到可分页数据,则控制器方法将被置空.请注意,这样做将要求您提供bot页面和size参数以及请求,因为任何可用参数都没有默认值.

参数: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>
Run Code Online (Sandbox Code Playgroud)

在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);
    }
}
Run Code Online (Sandbox Code Playgroud)


Prz*_*wak 16

对于Spring Boot 2.X,您有一组参数:

# DATA WEB (SpringDataWebProperties)
spring.data.web.pageable.default-page-size=20 # Default page size.
spring.data.web.pageable.max-page-size=2000 # Maximum page size to be accepted.
spring.data.web.pageable.one-indexed-parameters=false # Whether to expose and assume 1-based page number indexes.
spring.data.web.pageable.page-parameter=page # Page index parameter name.
spring.data.web.pageable.prefix= # General prefix to be prepended to the page number and page size parameters.
spring.data.web.pageable.qualifier-delimiter=_ # Delimiter to be used between the qualifier and the actual page number and size properties.
spring.data.web.pageable.size-parameter=size # Page size parameter name.
spring.data.web.sort.sort-parameter=sort # Sort parameter name.
Run Code Online (Sandbox Code Playgroud)


Sat*_*jan 13

您可以在application.yml中设置如下

spring.data.rest.default-page-size: 50
Run Code Online (Sandbox Code Playgroud)

  • 该设置可能仅在使用spring-data-rest HATEOS框架时才相关 (3认同)
  • 我尝试了很多方法让这个设置起作用,似乎不想生效(1.4.3.RELEASE) - 有任何建议吗?`spring.data.rest.default-page-size:99` (2认同)

Ror*_*mpf 9

并且,为了完整性,这里是Spring Boot配置的示例.在扩展WebMvcConfigurerAdapter的@Configuration类中,将默认页面大小设置为50个项目,如下所示:

@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
    PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver();
    resolver.setFallbackPageable(new PageRequest(0, 50));
    argumentResolvers.add(resolver);
    super.addArgumentResolvers(argumentResolvers);
}
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以在分页参数之前使用此注释:

@PageableDefault(size = 40)

// so your parameter should be like this:
@PageableDefault(size = 40) Pageable pageable
Run Code Online (Sandbox Code Playgroud)

  • 如何通过属性文件使这40可配置? (2认同)