2015-01-06 20 views
0

有下列URL - /用戶/ 2/profile文件,/用戶/ 2/userPosts如何在Spring Data REST資源中返回關聯的表示形式?

我需要Concat的兩個彈簧數據REST結果的輸出在服務器端,並從他們建立一個JSON和發送不同的URL /users/2/custom

所以,我想從Spring MVC中做出2調用SDR的網址,我們可以做到這一點使用RestTemplate和一些JSON CONCAT效用,這裏的服務器和數據庫是同一臺機器上,以便RestTemplate將可能有本地主機

一個例子將有助於

回答

1

您可能更願意查看Spring Data REST的投影功能,該功能允許您使用此blog post中所述的界面製作自定義響應。

由於這兩個屬性(profileuserPosts)似乎是一個用戶的項目資源協會它應該足以做這樣的事情:

@Projection(types = User.class) 
interface UserWithDetails { 

    // List getters for basic properties you want to expose… 

    // Add dedicated getters for associations to be included 

    Profile getProfile(); 

    List<Post> getUserPosts(); 
} 

客戶現在可以通過一個projection參數暴露的資源看到擴展的表示。

作爲替代方案,可以爲ProfilePost創建這些類型的接口,在存儲庫這兩種類型的配置@RepositoryRestResource包含excerptProjection = YourProjectionInterface.class。只要響應中包含關聯(即可以嵌入實際鏈接到的資源),這將導致呈現投影。

+0

感謝@Oliver,但我有一個問題如果我將摘錄預測添加到ProfileRespository和UserPostRepository,我是否仍然能夠使用來自這些URL的PUT/PATCH請求創建/更新新的配置文件和Post記錄 -/profiles和/ userPosts – fortm

+0

第二個疑問也是存在的,當我將一個存儲庫作爲摘錄投影時,我發現這些關聯確實嵌入在實體中。爲了舉一個例子,我創建了UserRepository本身作爲摘錄投影。由於UserPost和Profile具有用戶對象,因此它們默認顯示用戶投影數據。有什麼方法可以隱藏未來用戶信息和個人資料中的預計數據。我在用戶上嘗試了@JsonIgnore,但它並沒有幫助 – fortm

+1

不,不管怎樣,無處不在應用摘要預測*嵌入關聯。在這種情況下,我通常會建議避免雙向關係,因爲所有三個概念基本上都是聚合根(由於由存儲庫管理),如果使用雙向關係,則難以強制實施聚合一致性。 如果您有選擇地只想在用戶端應用合併,請使用第一個建議,爲'User'製作一個投影,以便客戶端可以專門控制何時使用它。 –

相關問題