spring hateoas 为 collection 或 pojo 生成不同的响应
spring hateoas generates different responses for collection or pojo
我有两个类
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() {
}
}
两个响应都添加了 links object,但资源 A 是 "links",资源 B 是“_link”,结构也发生了变化
//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
添加 link
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 的响应 headers 是
"content-type": "application/json;charset=UTF-8"
和 b
"content-type": "application/hal+json;charset=UTF-8"
难道是因为返回数组不是真的Restful?正如一些 post 建议
p.s。我添加和删除了@EnableHypermediaSupport,但似乎没有影响问题。
"_links"
在 HAL specification 之后。 Spring HATEOAS 包含一个专用的序列化程序,但它仅用于扩展 ResourceSupport
.
的 类
返回一个简单的数组并不完全是"unRESTful",但它不符合 REST 成熟度级别 3(超媒体控件)。为了实现这一点,您可以将集合包装到一个扩展 ResourceSupport
的 Resources
实例中。然后,您应该为这两种类型获得相同的 link 序列化。
我有两个类
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() {
}
}
两个响应都添加了 links object,但资源 A 是 "links",资源 B 是“_link”,结构也发生了变化
//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
添加 linkAResource 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 的响应 headers 是
"content-type": "application/json;charset=UTF-8"
和 b
"content-type": "application/hal+json;charset=UTF-8"
难道是因为返回数组不是真的Restful?正如一些 post 建议
p.s。我添加和删除了@EnableHypermediaSupport,但似乎没有影响问题。
"_links"
在 HAL specification 之后。 Spring HATEOAS 包含一个专用的序列化程序,但它仅用于扩展 ResourceSupport
.
返回一个简单的数组并不完全是"unRESTful",但它不符合 REST 成熟度级别 3(超媒体控件)。为了实现这一点,您可以将集合包装到一个扩展 ResourceSupport
的 Resources
实例中。然后,您应该为这两种类型获得相同的 link 序列化。