2013-07-31 12 views
9

Esempio: corso di classe e insegnante con relazione molti-a-uno, come cambiare insegnante per un determinato corso tramite il riposo dei dati di primavera?Come aggiornare l'oggetto di riferimento in Spring-data rest?

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

Risposta:

{ 
    "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 

Risposta:

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

Come sopra indicato, corso 2 è associato con l'insegnante 1, come cambiare insegnante a insegnante 2?

ho provato:

nome ovviamente aggiornato con successo:

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

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

successo quando tenta di aggiornare insegnante oggetto di riferimento:

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

con payload

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

Grazie!

+0

Qualsiasi aggiornamento su questo? – Wirus

+0

fantastico! In realtà ha funzionato. Pensavo che il payload accettasse solo l'intestazione con "application/json". Non riesco a trovare questo nel documento di dati di primavera però. Molte grazie. – Liu

risposta

12

Che ne dite di qualcosa di simile:

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 

Questo è un modo suggerito dal libro Primavera dati di O'Reilly.

+0

Ah, hanno reso l'aggiornamento di un aspetto di riferimento unico come l'aggiunta di nuovi riferimenti a una raccolta. Ecco perché usa text/uri-list anche se non c'è nessuna lista coinvolta. –

+0

* Perché * lo faresti? Non significherebbe che il tuo cliente prende il controllo delle associazioni? Cosa succede se il tuo cliente dimentica di farlo? – displayname

0

Penso che dovresti controllare la cascata per corso. Perché se stai aggiornando il corso, allora dovrebbe aggiornare anche il tuo insegnante, se l'aggiornamento a cascata o Tutto deve essere assegnato per il tuo corso.

0

Utilizzando httpie PATCH invece di opere PUT per me:

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

Ancora una volta, questo non funziona con PUT.

Problemi correlati