2016-10-05 78 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等。