Дополнительно формат отключить HATEOAS весной данные
Итак, предположим, у меня есть существующее приложение, которое имеет две конечные точки /люди и /брюки. Вызов GET / people возвращает:
[
{
"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 / person, я бы получил что-то вроде:
{
"_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")?
спасибо!
Обновлено
хорошо-так что, к моему огорчению, то, что я ищу, не поддерживается. Я understadn почему СДР сильно склоняется в сторону гипермедиа... но я не покупаю, что предоставление возможности "отключить" гипермедиа на основе заголовка, таким образом, предоставляя больше опций, - это плохо.
это в стороне, я немного не уверен, как на самом деле достичь этого через мой собственный Контроллеры. Если я создам контроллер и попытаюсь переопределить /people
RequestMapping с 'produces =" application/json" я могу получить "raw" json обратно с Accept="application/json", но если я передам Accept="application / hal+json", я получу 406 с "не смог найти приемлемое представление". Похоже, что сопоставления ресурсов SDR не сопоставляются с типом контента ... есть предложения?
1 ответов
короткий ответ: вы не можете использовать spring-data-rest без hateoas. Если вы хотите создать свой веб-сервис без hateoas, вам придется написать свои собственные контроллеры (которые все еще могут использовать репозитории spring-data).
цитата Оливера Гирке в это так пост:
на самом деле вся моя точка зрения: сервер просто делает достойный отдых. Если это ломает клиента, это клиент, который должен быть исправлен (щипанным.) Поэтому гипермедиа аспект фундаментальный для весны Данные отдыхают, и мы не собираемся отступать от этого. Это, наверное, не удовлетворение в вашей конкретной ситуации, но должен ответить на вопрос по крайней мере.): - Оливер Гирке!--1-->