2013-07-31 23 views
9

例子:類課程與教師有許多一對一的關係,如何通過Spring數據休息改變教師一定的課程?如何更新Spring數據休息中的引用對象?

GET http://localhost:7070/study-spring-data/course/2 

響應:

{ 
    "name" : "CSCI-338 Hardcore Java", 
    "_links" : [ { 
    "rel" : "course.Course.teacher", 
    "href" : "http://localhost:7070/study-spring-data/course/2/teacher" 
    }, { 
    "rel" : "self", 
    "href" : "http://localhost:7070/study-spring-data/course/2" 
    } ] 
} 

GET http://localhost:7070/study-spring-data/course/2/teacher 

響應:

{ 
    "_links" : [ { 
    "rel" : "course.Course.teacher", 
    "href" : "http://localhost:7070/study-spring-data/course/2/teacher/1" 
    } ] 
} 

如上所示,當然2與教師1相關聯,如何改變教師到教師2?

我曾嘗試:

成功更新課程名稱:

PUT http://localhost:7070/study-spring-data/course/2 與有效載荷

{ 
     "name" : "CSCI-223 Hardcore C++", 
    } 

不成功時嘗試更新參照物老師:

PUT http://localhost:7070/study-spring-data/course/2/teacher 

與有效載荷

{ 
     "_links" : [ { 
     "rel" : "course.Course.teacher", 
     "href" : "http://localhost:7070/study-spring-data/course/2/teacher/2" 
     } ] 
    } 

謝謝!

+0

對此有何更新? – Wirus

+0

太棒了!它實際上工作。我認爲有效載荷只接受帶有「application/json」的頭文件。儘管如此,我無法在spring-data文件中找到它。非常感謝。 – Liu

回答

12

怎麼是這樣的:

curl -v -X PUT -H "Content-Type: text/uri-list" \ 
    -d "http://localhost:7070/study-spring-data/teacher/1" \ 
    http://localhost:7070/study-spring-data/course/123/teacher 

這是O'Reilly的數據春建議書的方式。

+0

啊,他們更新了一個參考看起來就像添加一個集合的新引用。這就是爲什麼它使用text/uri-list,即使沒有涉及列表。 –

+0

*爲什麼*你會那樣做?這不是說你的客戶可以控制關​​聯嗎?如果你的客戶忘記這麼做會怎麼樣? – displayname

0

我想你應該有檢查級聯的課程。因爲如果你正在更新課程,那麼它也應該更新你的老師,如果級聯更新或全部分配給你的課程。

0

使用httpie PATCH而不是PUT作品對我來說:

http PATCH :7070/study-spring-data/course/2 teacher="http://localhost:7070/study-spring-data/teacher/2" 

再次,這不符合PUT工作。

相關問題