org.springframework.data.domain.Pageable 返回第一页码 0



使用 org.springframework.data.domain.Pageable .我想从 1 开始寻呼号码。我看到了同样的帖子并做到了,但它们在我的应用程序中不起作用。

获取 Spring 启动分页码数从 1 开始而不是 0

Spring 数据休息 - 配置分页

build.gradle

dependencies {
    compile 'org.springframework.boot:spring-boot-starter-web'
    compile 'org.springframework.data:spring-data-rest-webmvc'
}

配置

import org.springframework.data.web.PageableHandlerMethodArgumentResolver;
import org.springframework.data.web.config.PageableHandlerMethodArgumentResolverCustomizer;
import org.springframework.stereotype.Component;
@Component
public class CustomConfig implements PageableHandlerMethodArgumentResolverCustomizer {
    @Override
    public void customize(PageableHandlerMethodArgumentResolver pr) {
        pr.setOneIndexedParameters(true);
    }
}

控制器

@GetMapping("/")
public Integer index(Pageable pageable) {
    return pageable.getPageNumber();
}

结果

% curl 'localhost:8080/'
0
% curl 'localhost:8080/?page=1'
0
% curl 'localhost:8080/?page=2'
1

我想做

% curl 'localhost:8080/'
1
% curl 'localhost:8080/?page=1'
1
% curl 'localhost:8080/?page=2'
2

尝试使用如下所示WebMvcConfigurerAdapter进行配置,而不是直接实现PageableHandlerMethodArgumentResolverCustomizer

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
        PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver();
        resolver.setOneIndexedParameters(true);
        argumentResolvers.add(resolver);
        super.addArgumentResolvers(argumentResolvers);
    }
}

如果您使用的是 Spring Boot 2.X,则可以从 WebMvcConfigurerAdapter 切换到应用程序属性,如下所示:

# 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=true # 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.

仅供参考,您需要更改以下内容:

@GetMapping("/")
public Integer index(Pageable pageable) {
    return pageable.getPageNumber();
}

对此:

@GetMapping("/")
public Integer index(
    @RequestParam(value = "page", required = false, defaultValue = "0") int page,
    @RequestParam(value = "size", required = false, defaultValue = "10") int size,
    @PageableDefault(value = 10, page = 0) Pageable pageable) {
  return pageable.getPageNumber();
}

你需要在你的请求中有这些GET参数,以便Spring可以将它们强制到可分页对象中,你可以用这种方式定义它们,为它们选择名称,等等。

由于这个强制/绑定过程是spring.data.web.pageable.one-indexed-parameters属性的工作,这就是请求需要的外观。

最新更新