2013-07-31 3 views
9

Пример: класс Курс и Учитель, имеющий отношения «много-к-одному», как изменить учителя на определенный курс через отдых в Spring-data?Как обновить объект ссылки в 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" 
     } ] 
    } 

Спасибо!

+0

Есть ли у вас обновления? – Wirus

+0

потрясающий! Это действительно сработало. Я думал, что полезная нагрузка только принимает заголовок с помощью «application/json». Однако я не могу найти это в документе весенних данных. Большое спасибо. – 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 

Это способ предложил книге Spring Data O'Reilly.

+0

Ах, они сделали обновление одного ссылочного вида, как добавление новых ссылок на коллекцию. Вот почему он использует текст/uri-list, даже если в нем нет списка. –

+0

* Зачем ты это сделал? Разве это не означает, что ваш клиент берет контроль над ассоциациями? Что делать, если ваш клиент забыл это сделать? – displayname

0

Я думаю, вам нужно проверить Cascading for Course. Потому что, если вы обновляете курс, он также должен обновить своего учителя, если для вашего курса будет назначено каскадное обновление или все.

0

Использование httpie ЗАПЛАТЫ вместо PUT работ для меня:

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

Опять же, это не работает с PUT.

Смежные вопросы