2014-07-16 116 views
4

我使用Spring Data Rest 2.1.1 Release進行默認配置。考慮以下資源:Spring Data Rest 2.1中的分頁資源子資源

GET /communities/MyCommunity 

{ 
    "creationDate": "2014-07-16T06:22:37.153+0000", 
    "name": "GroupeSEB", 
    "_links": { 
     "self": { 
      "href": "http://localhost:8080/api/communities/GroupeSEB" 
     }, 
     "posts": { 
      "href": "http://localhost:8080/api/communities/GroupeSEB/posts" 
     } 
    } 
} 

當我拿到 「上崗」 子資源:

GET /communities/MyCommunity/posts 

{ 
    "_embedded": { 
     "posts": [ 
      { 
       "creationDate": "2014-07-09T13:09:14.535+0000", 
       "id": "53bd3efae4b012818368c549", 
       "_links": { 
        "self": { 
         "href": "http://localhost:8080/api/posts/53bd3efae4b012818368c549" 
        } 
       } 
      } 
     ] 
    } 
} 

無分頁被啓用。由於我的父資源可以聚合大量的帖子(其子資源),因此如何爲每個子資源啓用分頁?

回答

1

答案很簡單:你不能。原因如下:

關聯資源表示主要實體與一個或多個其他實體之間的關聯。因此,爲了呈現這些資源,我們查找主要實體並僅訪問該屬性。這意味着,不存在存儲庫使用情況,並且不能應用地點分頁,因爲整個機制是存儲不可知的。我們對實體實例進行操作關聯如何加載的機制高度依賴於存儲庫。

因此,如果您的域模型中已經有對象關聯,那麼您完全受限於商店處理關聯的方式。所以即使你使用分頁,你也必須首先閱讀所有相關的對象才能獲得他們的id。

作爲一項解決方案,您可以僅回退到ID並手動公開資源,該資源將使用相關實體的存儲庫上的ID和專用查詢方法。

+0

面臨同樣的問題,在我的情況下,它是非常惡化的,因爲子資源導致GC錯誤由於大的結果集。我想我也應該RestExpose虛假的這種資源,並手動提供一個頁面資源庫中,綁定通過ResourceProcessor。相關鏈接 - http://stackoverflow.com/questions/26451920/pagination-in-spring-data-rest-for-嵌套資源 – fortm