Ben*_*n M 16 rest hateoas spring-data hypermedia spring-data-rest
所以假设我有一个现有的应用程序有两个端点/人和/裤子.呼叫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"
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
如果我使用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"
}
}
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
假设我有一堆我不想改变的现有客户端 - 在某些情况下是否有任何方法可以禁用响应的超媒体部分(比如Accept ="application/json")但是为了启用它们其他人(Accept ="hal + json")?
谢谢!
更新
好的 - 所以看起来我很懊恼,我不想支持.我说明为什么SDR强烈倾向于超媒体...但我不会购买提供基于标题"禁用"超媒体的功能,因此提供更多选项是一件坏事.
除此之外,我有点不确定如何通过我自己的控制器实现这一点.如果我创建一个Controller并尝试/people使用`produce ="application/json" 覆盖RequestMapping,我可以使用Accept ="application/json"返回"raw"json但是如果我通过Accept ="application/hal + json"我得到了406"找不到可接受的代表".看起来SDR资源映射没有映射到内容类型......任何建议?
gyo*_*der 18
简短的回答是,你不能在没有hateoas的情况下使用spring-data-rest.如果你想在没有hateoas的情况下构建你的web服务,你必须编写自己的控制器(它仍然可以使用spring-data存储库).
在这篇SO帖子中引用Oliver Gierke :
实际上我的重点是:服务器正在做正常的REST.如果这打破了客户端,则需要修复(调整)客户端.因此,超媒体方面是Spring Data REST的基本方面,我们不会退缩.这可能不满足你的具体情况,但至少应该回答这个问题:). - 奥利弗吉尔克
| 归档时间: |
|
| 查看次数: |
10312 次 |
| 最近记录: |