将@PageableDefault与Spring数据REST一起使用

将@PageableDefault与Spring数据REST一起使用,spring,spring-mvc,pagination,spring-data-rest,Spring,Spring Mvc,Pagination,Spring Data Rest,@PageableDefault的文档说明: 注记时设置默认值的注释 org.springframework.data.domain.Pageable进入控制器方法 使用SpringDataREST时,有没有一种方法可以在不定义控制器的情况下设置默认值 在存储库中设置PageableDefault(如下所示)似乎不起作用 Page<Player> findAll(@PageableDefault(size=5) Pageable pageable); Page findAll(@P

@PageableDefault的文档说明:

注记时设置默认值的注释
org.springframework.data.domain.Pageable
进入控制器方法

使用SpringDataREST时,有没有一种方法可以在不定义控制器的情况下设置默认值

在存储库中设置PageableDefault(如下所示)似乎不起作用

Page<Player> findAll(@PageableDefault(size=5) Pageable pageable);
Page findAll(@PageableDefault(size=5)Pageable-Pageable);
弹簧和弹簧护套的解决方案 您可以扩展RepositoryRestConfigurerAdapter配置以设置默认页面大小:

@Configuration
public class RepositoryRestConfig extends RepositoryRestConfigurerAdapter {

    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration repositoryRestConfiguration) {
            repositoryRestConfiguration.setDefaultPageSize(5);
    }
}
仅适用于Spring引导的解决方案 您可以在application.properties中设置默认大小: 其他Spring数据属性:
来源:

使用RestResource注释存储库方法时,可以通过截取请求并添加默认参数值(如果不存在)自定义页面大小:

然后为特定url模式注册此筛选器:

@Configuration
public class RestResourcePaginationConfig {

    @Bean
    public FilterRegistrationBean<RestResourceDefaultPaginationFilter> paginationFilter() {
        FilterRegistrationBean<RestResourceDefaultPaginationFilter> registrationBean = new FilterRegistrationBean<>();
        registrationBean.setFilter(new RestResourceDefaultPaginationFilter());
        registrationBean.addUrlPatterns("/myEntities/search/rest-resource-endpoint");
        return registrationBean;
    }
}
@配置
公共类RestResourcePaginationConfig{
@豆子
公共筛选器注册bean分页筛选器(){
FilterRegistrationBean registrationBean=新的FilterRegistrationBean();
setFilter(新RestResourceDefaultPaginationFilter());
addUrlPatterns(“/myenties/search/rest资源端点”);
返回注册bean;
}
}

当您想要对alexbt描述的更一般的选项有例外时,这很方便。

我的错,我只想到spring boot添加了一个非spring boot解决方案Works,但为所有存储库和所有方法设置了默认值。我会等待其他答案,如果没有其他解决方案,我会接受这个答案。ThanksHow是否将默认值设置为未分页?
# DATA REST (RepositoryRestProperties)
spring.data.rest.base-path= # Base path to be used by Spring Data REST to expose repository resources.
spring.data.rest.default-page-size= # Default size of pages.
spring.data.rest.detection-strategy=default # Strategy to use to determine which repositories get exposed.
spring.data.rest.enable-enum-translation= # Enable enum value translation via the Spring Data REST default resource bundle.
spring.data.rest.limit-param-name= # Name of the URL query string parameter that indicates how many results to return at once.
spring.data.rest.max-page-size= # Maximum size of pages.
spring.data.rest.page-param-name= # Name of the URL query string parameter that indicates what page to return.
spring.data.rest.return-body-on-create= # Return a response body after creating an entity.
spring.data.rest.return-body-on-update= # Return a response body after updating an entity.
spring.data.rest.sort-param-name= # Name of the URL query string parameter that indicates what direction to sort results.
@Component
@Order(1)
public class RestResourceDefaultPaginationFilter implements Filter {
    @Value("${rest.resource.custom.page.size}")
    private String pageSize;

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        chain.doFilter(new HttpServletRequestWrapper((HttpServletRequest) request) {
            public String getParameter(String paramName) {
                String value = super.getParameter(paramName);
                // if no size parameter defined on request, then use the configuration default
                if ("size".equals(paramName) && StringUtils.isEmpty(value)) {
                    return page.size;
                }
                return value;
            }
        }, response);
    }
}
@Configuration
public class RestResourcePaginationConfig {

    @Bean
    public FilterRegistrationBean<RestResourceDefaultPaginationFilter> paginationFilter() {
        FilterRegistrationBean<RestResourceDefaultPaginationFilter> registrationBean = new FilterRegistrationBean<>();
        registrationBean.setFilter(new RestResourceDefaultPaginationFilter());
        registrationBean.addUrlPatterns("/myEntities/search/rest-resource-endpoint");
        return registrationBean;
    }
}