如何在Spring-data rest中更新引用对象?

时间:2013-07-31 21:23:06

标签: java spring rest spring-data spring-data-rest

示例:课程课程和教师有多对一的关系,如何通过Spring-data rest来改变某个课程的老师?

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"
      } ]
    }

谢谢!

3 个答案:

答案 0 :(得分:13)

这样的事情怎么样:

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书中提出的一种方式。

答案 1 :(得分:0)

我认为你应该检查Cascading for Course。因为如果您要更新课程,那么如果要为您的课程分配级联更新或全部,它也应该更新您的老师。

答案 2 :(得分:0)

使用httpie PATCH代替PUT对我有用:

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

同样,这不适用于PUT。