gpt4 book ai didi

spring hatoas 为 collection 或 pojo 生成不同的响应

转载 作者:行者123 更新时间:2023-12-02 09:42:07 26 4
gpt4 key购买 nike

我有两个类

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 是“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 的链接

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 的响应 header

"content-type": "application/json;charset=UTF-8"

对于b

"content-type": "application/hal+json;charset=UTF-8"

难道是因为返回数组并不是真正的Restful?正如一些帖子所建议的

附:我已添加和删除了@EnableHypermediaSupport,但似乎并没有影响问题。

最佳答案

“_links” 遵循 HAL specification 。 Spring HATEOAS 为此提供了一个专用序列化器,但它仅用于扩展 ResourceSupport 的类。

返回一个简单的数组并不完全是“非RESTful”,但它不符合REST成熟度级别3(超媒体控件)。为了实现这一目标,您可以将集合包装到一个 Resources 实例中,该实例扩展了 ResourceSupport。那么您应该为这两种类型获得相同的链接序列化。

关于spring hatoas 为 collection 或 pojo 生成不同的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34752386/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com