Quindi diciamo che ho un'applicazione esistente con due endpoint/persone e/pants. Chiamare GET/persone ritorna:Facoltativamente disabilitare il formato HATEOAS in Spring Data Rest
[
{
"name":"john",
"age":37,
"pants":[
{
"color":"green",
"brand":"levis",
"size":"medium"
},
{
"color":"indigo",
"brand":"jncos",
"size":"medium-with-huge-legs"
}
]
},
{
"name":"june",
"age":23,
"pants":[
{
"color":"pink",
"brand":"gap",
"size":"small"
}
]
}
]
Se dovessi usare primavera dati Riposo e chiamare GET/persona mi piacerebbe ricevere qualcosa come:
{
"_links":{
"next":{
"href":"http://myapp.com/people?page=1&size=20"
},
"self":{
"href":"http://myapp.com/people{&page,size,sort}",
"templated":true
},
"search":{
"href":"http://myapp.com/people/search"
}
},
"_embedded":{
"people":[
{
"name":"john",
"age":37,
"_links":{
"self":{
"href":"http://myapp.com/people/john"
},
"pants":{
"href":"http://myapp.com/people/john/pants"
}
}
},
{
"name":"june",
"age":23,
"_links":{
"self":{
"href":"http://myapp.com/people/june"
},
"pants":{
"href":"http://myapp.com/people/june/pants"
}
}
}
]
}
}
Diciamo che ho un sacco di clienti esistenti che Non voglio dover cambiare: esiste un modo per disabilitare le parti ipermediali della risposta in alcuni casi (ad esempio Accept = "application/json") ma abilitarli per gli altri (Accept = "hal + json") ?
Grazie!
Aggiornato
Va bene - così sembra che molto al mio dispiacere, quello che sto cercando di fare non è supportata. Sottolineo perché gli SDR si stiano fortemente orientando verso Hypermedia ... ma non comprerei che fornire la capacità di "disabilitare" l'ipermedia basata su un'intestazione, fornendo così più opzioni è una cosa negativa.
A parte questo, sono un po 'incerto su come realizzarlo tramite i miei controller. Se creo un controller e tento di sovrascrivere il RequestMapping /people
con `produce =" application/json "sono in grado di recuperare il json" raw "con Accept =" application/json "ma se passo Accept =" application/hal + json "Ricevo un 406 con" Impossibile trovare una rappresentazione accettabile ". Sembra che i mapping delle risorse SDR non siano mappati con un tipo di contenuto ... qualche suggerimento?
Sì, lo si farebbe con un'intestazione Accept diversa. –
Jonathan, la domanda non è proprio come sapere * quando * restituire la risposta non-hateoas, ma come abilitare Spring Data Rest a non generare gli elementi Hypermedia nella risposta. – Ben
Credo che Spring Data REST utilizzi due HttpMessageConverters diversi per questo, e che siano in una catena. Se l'intestazione Accept indica application/hal + json, TypeConstrainedMappingJackson2HttpMessageConverter lo gestirà e produrrà HAL. Se, tuttavia, l'intestazione è solo 'application/json', il normale MappingJackson2HttpMessageConverter entra in gioco e non serializza su HAL. Non sono sicuro che questo aiuti, ma vorrei provare a modificare questo ultimo convertitore per non restituire i collegamenti ipermediali. –