2016-10-05 51 views
6

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

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

任何帮助应该是可观的。

实施具有以下问题艾伦答案后,

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)“数字”:2,的响应总是得到一个小于页面number.It应该返回当前页面的索引。

+0

您使用哪种技术开发前端页面? –

+0

Spring-boot 1.4.0 – VelNaga

+0

@Cèsar使用Ember的前端2.7 s – VelNaga

回答

2

Spring Boot将使用下面的Spring Data。

您需要配置

Spring的数据类如下:

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); 
    } 
} 
+0

它正在工作,但我面临的问题情侣.still我能够访问零索引页面URL“/books?page=0&size=2”。然后,响应中的“number”属性仍为零索引,我正在访问第3页,但将number属性设置为2,“last”:true,“totalElements” :5, “totalPages”:3,“size”:2,“number”:2,“sort”:null,“first”:false,“numberOfElements”:1“请指导我解决这个问题 – VelNaga

+0

对不起,但我不明白的问题:你想使用1基于分页,但打电话“/ books?page = 0&size = 2” –

+0

让我编辑我的问题,这样你会得到更好的清晰度 – VelNaga

0

为了得到更好的效果,你需要延长RepositoryRestMvcConfiguration,像下面

@Configuration 
    public class RespositoryConfiguration extends RepositoryRestMvcConfiguration { 

    @Override 
    @Bean 
    public HateoasPageableHandlerMethodArgumentResolver pageableResolver() { 

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

然后你要得到所有的链接和分页信息正确,“数字”除外,少一个。 见页= 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 
    } 
0

我和春天引导和Vue.js工作,我有这个问题:)

我有很多的文件,所以我已经实现Pageable像这样:

@GetMapping("/all") 
public Iterable<Document> getAll(@RequestParam(name = "page", required = false, defaultValue = "0") Integer page) 
{ 
    this.connectToDatabase(); 

    if(page == null){ 
     page = 0; 
    } 

    if(page >= 1){ 
     // Front-end problem forces us to mad solutions 
     page--; 
    } 

    Sort sort = new Sort(new Sort.Order(Sort.Direction.ASC, "id")); 
    Pageable pageable = new PageRequest(page,15, sort); 
    Iterable<Document> d = null; 
    try{ 
     d = this.repository.findAll(pageable); 
    }catch (Exception e){ 
     logger.error("Could not find documents in the database.", e); 
    } 

    return d; 
} 

我第一次打电话document/all,我得到0。然后,任何时候我所说的网页从我的前端应用程序的page = page -1;

所以当我从前端调用页面1时,这会在后端等页面0等。