【问题标题】:How to configure Spring boot pagination starting from page 1, not 0如何从第 1 页开始配置 Spring boot 分页,而不是 0
【发布时间】:2017-02-14 12:59:54
【问题描述】:

boot(1.4.0) "Pageable" 用于分页。它工作正常没有任何问题。但默认情况下页面值从“0”开始,但在前端页面值从“1”开始。那么是否有任何标准方法来增加值而不是手动增加代码中的页码?

public Page<Device> find(DeviceFindCommand deviceFindCommand, Pageable pageable){
//page = 0 //Actual is 0, Expected increment by 1. 
}

任何帮助都应该是可观的。

实施 Alan 回答后遇到以下问题,

1) 我仍然可以访问返回第一页的零页(我不知道这是否是问题,但我想更清楚)。

http://localhost:8180/api/v1/books/?page=3&size=2

回应

{
    "content": [
{
  "id": "57da9eadbee83fb037a66029",
  .
  .
  .
}{
.
.
.
}
],
    "last": false,
    "totalElements": 5,
    "totalPages": 3,
    "size": 2,
    "number": 2, //strange always getting 1 less than page number.
    "sort": null,
    "first": true,
    "numberOfElements": 2
}

2) "number": 2,在响应中总是比页码少一。它应该返回当前页面索引。

【问题讨论】:

  • 您使用哪种技术开发前端页面?
  • Spring-boot 1.4.0
  • @Cèsar 前端使用 Ember 2.7 s
  • 你解决过“数字”中的“0”吗?我也看到了。
  • @Tovkal 您可以查看 Alan Hay 的答案,它可能会对您有所帮助...除此之外我找不到任何其他方法...

标签: spring spring-mvc spring-boot pagination spring-data-jpa


【解决方案1】:

如果您使用的是 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=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.

但请记住,即使您更改了one-indexed-parameter,页面响应(PageImpl 类)也会返回页码从零开始的结果。这可能有点误导。

【讨论】:

  • 我提交了一个关于显示基于零的当前页面的响应的问题,即使配置为基于一个的分页jira.spring.io/browse/DATACMNS-563 我必须承认我仍然对这里的 api 的预期感到困惑。
【解决方案2】:

Spring 也添加了这个未来。只需在配置文件中将 oneIndexed 参数设置为 true,分页将从第 1 页开始。默认为 false,分页从 0 开始。

spring.data.web.pageable.one-indexed-parameters=true

【讨论】:

  • 最好你也添加一些细节来支持你的答案。
【解决方案3】:

Spring Boot 将在幕后使用 Spring Data。

你需要配置的Spring Data类如下:

org.springframework.data.web.PageableHandlerMethodArgumentResolver

特别是以下方法:

http://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/web/PageableHandlerMethodArgumentResolver.html#setOneIndexedParameters-boolean-

这将允许您按原样使用当前的 UI 分页,即第一页 = 1。

在启动应用程序中,我认为配置可能类似于:

@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);
    }
}

【讨论】:

  • 它正在工作,但我面临几个问题。我仍然能够访问零索引页面 URL "/books?page=0&size=2"。然后响应中的 "number" 属性是仍然是零索引,我正在访问 page:3 但将数字属性设为 2,“last”:true,“totalElements”:5,“totalPages”:3,“size”:2,“number”:2,“sort” : null,"first": false, "numberOfElements": 1"。请指导我解决这个问题。
  • 抱歉,我不明白这个问题:您想使用基于 1 的分页但调用“/books?page=0&size=2”
  • 让我编辑我的问题,以便您更清楚
  • 我已经编辑了我的帖子,请指导我解决这个问题
  • 您找到解决方案了吗?
【解决方案4】:

为了获得更好的结果,您需要扩展 RepositoryRestMvcConfiguration,如下所示

@Configuration
   public class RespositoryConfiguration extends RepositoryRestMvcConfiguration {

    @Override
    @Bean
    public HateoasPageableHandlerMethodArgumentResolver pageableResolver() {

        HateoasPageableHandlerMethodArgumentResolver resolver = super.pageableResolver();
        resolver.setOneIndexedParameters(true);
        return resolver;
    }
}

然后你会得到所有的链接和分页信息,除了“数字”,它少了一个。 查看 page=1 的结果,

  "_links": {
    "first": {
      "href": "http://localhost:8080/user/user?page=1&size=5"
    },
    "self": {
      "href": "http://localhost:8080/user/user"
    },
    "next": {
      "href": "http://localhost:8080/user/user?page=2&size=5"
    },
    "last": {
      "href": "http://localhost:8080/user/user?page=2&size=5"
    }
  },
  "page": {
    "size": 5,
    "totalElements": 6,
    "totalPages": 2,
    "number": 0
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 2021-05-27
    相关资源
    最近更新 更多