如何在Spring-data rest中更新引用对象?
示例:课程和教师有多对一的关系,如何通过Spring-datarest改变某个课程的教师?
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
with payload
{ "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" } ] }
谢谢!
这样的事情怎么样:
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的Spring Data书中提出的一种方式。
我想你应该检查Cascading for Course。 因为如果您要更新课程,那么如果要为您的课程分配级联更新或全部,它也应该更新您的老师。
使用httpie PATCH而不是PUT对我有用 :
http PATCH :7070/study-spring-data/course/2 teacher="http://localhost:7070/study-spring-data/teacher/2"
同样,这不适用于PUT。