2015-10-15 109 views
2

可以說我有以下結構:春數據休息POST到子資源

@Entity 
class Person extends AbstractPersistable<Long> { 

    String name 
    String surname 
} 

@Entity 
class Task extends AbstractPersistable<Long> { 

    String description 

    @ManyToOne 
    Person person 
} 

如果我遵循正確的指導方針HAL我不應該暴露實體的ID。由於我沒有雙向關係,因此我無法使用PUTPATCHhttp://localhost:8080/persons

即使我沒有創建關係,我可能不會想首先POSTTask/tasks然後PUT/persons,(手機客戶端會殺了我)。但即使如此,我還沒有Task ID甚至從返回的實體,所以我可以PUTPerson實體。 (我顯然可以字符串解析,但我認爲這不合適)。

我可能不想在Person實體中有1000個任務的列表。所以不導出Task實體是不是一個真正的選擇(這意味着PATCH將無法​​正常工作)

所以我怎麼如果我不能得到他的身份證到PersonTask關聯?什麼是正確的方法?

+0

該id是URI! – zeroflagL

回答

1

在HAL鏈接用於引用相關資源而不是ID,HAL實體應始終返回一個鏈接到它自己,作爲其唯一標識符。

如果我沒有弄錯,你也可以使用DBRef註釋字段,並且應該爲你生成鏈接。

如果您希望相關資源實際上與數據內聯顯示,您將不得不起草投影。查看更多在這裏:

Spring Boot REST Resource not showing linked objects (sets)

最後但並非最不重要的 - 如果你想預測也包含鏈接,你將不得不作出ResourceProcessor對他們來說,在這裏看到:

How to add links to Spring Data REST projections?

2

如果您想要將任務與人員關聯起來,您需要鏈接到該人員。

讓說的人URI是http://localhost/persons/1

然後,你可以通過剛好路過該URI在人員屬性的人分配到的任務。

因此後到任務看起來是這樣的:

{ 
    "description": "some text", 
    "person": "http://localhost/persons/1" 
} 

春季數據,其餘的將查找的人,並採取了其他的事情。