Итак, допустим, у меня есть существующее приложение с двумя конечными точками/людьми и/брюками. Вызов GET/человек возвращается:Необязательно отключить формат HATEOAS в 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"
}
]
}
]
Если я должен был использовать Spring Data Rest и вызовите GET/человека я бы получить что-то вроде:
{
"_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"
}
}
}
]
}
}
Скажем, у меня есть куча существующих клиентов, Я не хочу меняться - есть ли способ отключить части гипермедиа ответа в некоторых случаях (например, Accept = "application/json"), но включить их для других (Accept = "hal + json") ?
Спасибо!
Обновлено
Хорошо - так что кажется, что к моему огорчению, что я ищу сделать, это не поддерживается. Я не понимаю, почему SDR сильно склоняется к Hypermedia ... но я не покупаю это, предоставляя возможность «отключить» гипермедиа на основе заголовка, тем самым предоставляя больше вариантов, это плохо.
В стороне, я немного не уверен, как на самом деле добиться этого через мои собственные контроллеры. Если я создаю Контроллер и попытаюсь переопределить команду RequestMapping с помощью `execute = 'application/json, то я могу получить« raw »json с помощью Accept =« application/json », но если я передам Accept =" application/hal + json «Я получаю 406 с« Не могу найти приемлемого представления ». Похоже, что сопоставления ресурсов SDR не сопоставляются с типом контента ... любые предложения?
Да, вы сделали бы это с другим заголовком Accept. –
Джонатан, вопрос на самом деле не связан с тем, как узнать *, когда *, чтобы вернуть ответ non-hateoas, но вместо этого я хотел бы включить Spring Data Rest, чтобы не генерировать элементы Hypermedia в ответе. – Ben
Я считаю, что Spring Data REST использует для этого два разных HttpMessageConverters и что они находятся в цепочке. Если заголовок Accept указывает приложение/hal + json, TypeConstrainedMappingJackson2HttpMessageConverter будет обрабатывать его и производить HAL. Если, однако, заголовок является только «application/json», обычный MappingJackson2HttpMessageConverter запускается и не будет сериализоваться в HAL. Не уверен, что это помогает, но я бы посмотрел на попытку настроить этот последний конвертер, чтобы не возвращать ссылки гипермедиа. –