所以,让我们说我有一个现有的应用程序有两个端点/人和/裤子。致电GET /人员返回:
[
{
"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 =&# 34; application / json")但是为其他人启用它们(Accept =" hal + json")?
谢谢!
更新
好的 - 所以看起来很让我懊恼的是,我不想支持我要做的事情。我总结了为什么SDR强烈倾向于超媒体......但我不会购买能够提供“禁用”#34;基于标题的超媒体因此提供更多选项是一件坏事。
除此之外,我有点不确定如何通过我自己的控制器实现这一点。如果我创建一个Controller并尝试使用`produce =" application / json"覆盖/people
RequestMapping。我能够得到" raw" json回来与Accept =" application / json"但如果我通过Accept =" application / hal + json"我得到406"无法找到可接受的代表和#34;。看起来SDR资源映射没有与内容类型映射...任何建议?
答案 0 :(得分:17)
简短的回答是,你不能在没有hateoas的情况下使用spring-data-rest。如果你想在没有hateoas的情况下构建你的web服务,你必须编写自己的控制器(它仍然可以使用spring-data存储库)。
在this SO post中引用Oliver Gierke:
实际上我的重点是:服务器正在做正常的REST。如果 打破客户端,需要修复客户端 (微调)。因此,超媒体方面是Spring的基本方面 数据REST,我们不会退出。那可能不是 满足你的具体情况,但应该回答这个问题 至少 :)。 - 奥利弗吉尔克