1

是否有可能在spring data rest中嵌入主要資源在HAL響應中關係的數據?spring-data-rest:是否可以在單個響應中動態地嵌入資源的關係?

推理是,在某些情況下,客戶端知道她將一次需要Child資源和SchoolPets關係。

使用鏈接此信息可以要求在N個請求,但最好將有可能在1

注意做到:正平深將是巨大的(JSON-API支持),但現在連1級的深度就足夠了。

根據HAL規範,甚至可能使用普通的春天討厭的東西(見this example),這顯然是可能的。

  • 這是可能的任何方式與春季數據休息?
  • 是否有可能沒有大量的鍋爐板代碼和基本上重寫SDR的位?

如果是這樣,怎麼辦?例子將是最受歡迎的。

請注意,所有有問題的資源應該是頂級資源,因此不會使用@RestResource(exported = false)並將其作爲主張by Oliver here內聯。

回答

1

您可以定義投影即會在網上的相關數據:

參見:

http://docs.spring.io/spring-data/rest/docs/current/reference/html/#projections-excerpts

8.3。摘錄通常訪問的數據構建域對象時,出現了REST服務的常見情況。例如,一個人 存儲在一個表中,並將其相關的地址存儲在另一個表中。 默認情況下,Spring Data REST將把客戶的地址作爲客戶端必須導航的URI來提供。但是,如果是很常見的消費者 始終獲取這些額外的數據塊,摘錄投影可以去 前進,內聯這一塊額外的數據,爲您節省額外的GET

@Projection(name = "withAssociations", types = { MyEntity.class }) 
public interface WithAssocationsProjection{ 

    //method names match the getter methods in the corresponding Entity 

    List<School> getSchools(); 

    List<Pet> getPets(); 

    //you can also in-line a subset of data or have a further level 
    //of data in-lined for the association by 
    //specifying a further projection as the Collection Type. 


    List<ChildProjection> getChildren(); 
} 

客戶可再請求數據的像的特定視圖:

http://localhost:9090/api/myEntities?projection=withAssociations

http://localhost:9090/api/myEntities/123?projection=withAssociations

+0

不幸的是,投影並沒有完全回答這個問題。預測內嵌數據,但不使用HAL中的'_embedded'鍵。如果同一個實體由多個父實體內聯,那麼它將在有效負載中重複,浪費大量空間。 – Casey

+0

我想自定義控制器將是前進的方向。 –

相關問題