gpt4 book ai didi

java - 使用 Spring 读取嵌入 HAL 集合的 hatoas 响应

转载 作者:行者123 更新时间:2023-11-30 05:31:50 25 4
gpt4 key购买 nike

我正在尝试阅读如下所示的 REST HATEOAS 回复:

{
"_embedded": {
"tasks": [
{
"id": 1,
"name":"task1"
"_links": {
"self": {
"href": "http://localhost:8080/v1/tasks/1"
},
"tasks": {
"href": "http://localhost:8080/v1/tasks"
}
}
}
]
},
"_links": {
"self": {
"href": "http://localhost:8080/v1/tasks?page=0&size=1"
}
},
"page": {
"size": 1,
"totalElements": 1,
"totalPages": 1,
"number": 0
}
}

我正在尝试遵循 spring 文档的示例:spring hateoas traverson .

Java 代码:

...
TypeReferences.ResourcesType<Resources<Task>> resourceParameterizedTypeReference = new TypeReferences.ResourcesType<Resources<Task>>(){};

Traverson traverson = new Traverson(new URI("http://localhost:8080/v1/tasks"), MediaTypes.HAL_JSON);

Traverson.TraversalBuilder builder = traverson.follow(rel("tasks")).withHeaders(headers);

Resources<Resources<Task>> taskResources = builder.toObject(resourceParameterizedTypeReference);
...

但我收到此错误:

Did not find LinkDiscoverer supporting media type text/html!

原因:“follow(rel("tasks"))”找不到“tasks”。

我正在尝试其他解决方案,例如: Deserialize JSON containing (_links and _embedded) using spring-hateoas ,我也收到错误“期望找到与 rel ... 的链接”。

也许最后我不明白使用 traverson 对象的好方法。

我通过解析 Json 中的响应来解决我的问题,但是它们是获取 bean 列表中“_embedded”标签中包含的列表的另一种方法吗?

如果你有一些例子,我很感兴趣:)。

最佳答案

我认为您需要使用 Json Path 表达式来访问嵌入的内容。

Traverson.TraversalBuilder builder = traverson.follow("$._embedded.tasks[0]").withHeaders(headers);

Resources<Resources<Task>> taskResources = builder.toObject(resourceParameterizedTypeReference);

以下工具对于处理路径表达式非常有用:http://www.jsonquerytool.com/

顺便说一句,您的 JSON 在“名称”后面缺少一个“,”。

关于java - 使用 Spring 读取嵌入 HAL 集合的 hatoas 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57378073/

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