我有两个班级
import org.springframework.hateoas.ResourceSupport;
public class A{}
public class B{}
public class AResource extends ResourceSupport {
private final A a;
}
public class BResource extends ResourceSupport {
private final B b;
}
@Controller
public class Controller {
@RequestMapping
@ResponseBody
public Set<AResource> giveMeColl() {
}
@RequestMapping
@ResponseBody
public BResource giveMeSingle() {
}
}
这两个响应都添加了链接对象,但是对于资源A来说,是#34;链接&#34;资源B是&#34; _link&#34;以及结构变化
//RESPONSE FOR A
[
{
"content":{
//my fancy object
},
"links":[
{
"rel": "self",
"href": "http://localhost:8080/myid/22"
}
]
}
]
{
"content":{
//my fancy object
},
"_links":[
{
"self": "http://localhost:8080/myid/22/someelse/33"
}]
}
两个资源都是用汇编程序构建的,两者都是从ids
添加链接AResource aresource = new AResource(a);
resource.add(linkTo(methodOn(Controller.class).giveMeColl()).withSelfRel());
BResource bresource = new BResource(b);
resource.add(linkTo(methodOn(Controller.class).giveMeSingle()).withSelfRel());
a的响应标头是
"content-type": "application/json;charset=UTF-8"
和b
"content-type": "application/hal+json;charset=UTF-8"
可能是因为返回一个数组并不是真的很安静吗?正如一些帖子所暗示的那样
P.S。我添加并删除了@EnableHypermediaSupport,但似乎没有影响到这个问题。
答案 0 :(得分:1)
"_links"
跟在HAL specification之后。 Spring HATEOAS包含一个专用的序列化程序,但它仅用于扩展ResourceSupport
的类。
返回一个简单的数组并不完全是“unRESTful”,但它不符合REST成熟度级别3(超媒体控件)。为了实现这一点,您可以将集合包装到Resources
实例中,该实例扩展ResourceSupport
。您应该为这两种类型获得相同的链接序列化。