如何在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。