假設我有一個現有的具有兩個端點/人員和/褲子的應用程序。調用get /人返回:可選擇在Spring Data Rest中禁用HATEOAS格式
[
{
"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數據休息和調用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爲什麼非常傾向於超媒體......但是我不會購買那種提供基於頭部「禁用」超媒體的能力,因此提供更多選擇是一件壞事。
除此之外,我有點不確定如何通過我自己的控制器實現。如果我創建一個控制器並試圖用`produce =「application/json覆蓋/people
的RequestMapping,我可以通過Accept =」application/json「獲得」raw「json,但是如果我通過Accept =」application/hal + json「我用」找不到可以接受的表示法「得到406。它看起來像SDR資源映射沒有與內容類型映射......任何建議?
是的,你可以用不同的Accept頭做。 – 2014-11-22 20:53:47
Jonathan,問題並不在於如何知道*何時返回非討厭的響應,而是如何讓Spring Data Rest在響應中不生成超媒體元素。 – Ben 2014-11-23 21:48:02
我認爲Spring Data REST爲此使用了兩個不同的HttpMessageConverters,並且它們處於鏈中。如果Accept頭指示application/hal + json,則TypeConstrainedMappingJackson2HttpMessageConverter將處理它併產生HAL。但是,如果標題只是'application/json',常規的MappingJackson2HttpMessageConverter會啓動並且不會序列化爲HAL。不知道這是否有幫助,但我會考慮試圖調整後者轉換器不返回超媒體鏈接。 – 2014-11-24 17:30:05