当前位置: 首页 > 知识库问答 >
问题:

使用带spring的嵌入式HAL集合读取hateoas响应

蒙峰
2023-03-14

我正在尝试阅读像这样的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's留档的例子: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”。

我正在尝试其他类似的解决方案:使用spring hateoas反序列化包含(\u links和\u embedded)的JSON,我得到错误“期望找到带有rel的链接…”也

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

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

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

共有1个答案

邓阳伯
2023-03-14

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

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

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

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

顺便说一句,您的JSON在“name”之后缺少一个“,”。

 类似资料:
  • 我正在寻找HAL中嵌套_embedded如何使用Spring HATEOAS API编程的例子。最佳实践是什么? 下面是我想要实现的一个例子:

  • 我跟着Spring走。io是一个关键的教程,可以让REST API与MySQL DB一起启动,一切都进展顺利。然而,我发现了一个我无法配置或解决的行为。 当我使用内置功能从PagingAndSortingRepository中检索资源时,生成的剩余资源会自动分页,并用有用的HAL链接(链接、self、搜索、链接资源等)进行封装。我想用这个。 当我实现我的控制器来定制PostMapping行为并引入

  • 我用了Spring初始化器(https://start.spring.io/)来创建一个只包含初学者“Jersey(JAX-RS)”和“HATEOAS”的应用程序。然后我添加了@EnableHypermediaSupport(type=HAL),但我无法以HAL格式正确呈现链接。 我的目标格式是: 我目前得到的是: 除了初始化器生成的类之外,我还添加了这个配置 此资源(终结点): 和一个虚拟bea

  • 我想使用REST API的HAL格式来包含嵌入式资源。我在API中使用Spring HATEOAS,Spring HATEOAS似乎支持嵌入式资源;但是,没有关于如何使用此功能的文档或示例。 有人能提供一个如何使用Spring HATEOAS包含嵌入式资源的例子吗?

  • 我正在尝试使用RestTemboard类使用基于HAL的REST服务。响应正文如下所示: 老师的课是这样的: GET方法的REST服务的返回类型是

  • 我正在尝试配置我的应用程序上下文,以便能够在我的应用程序中使用带有嵌入式图形的Neo4j服务器,但没有多大成功。我同时使用Spring数据(Mongo和Neo4j存储库方法)。这是我的应用程序上下文,未运行: 如果我不使用这种方法,只指定存储目录(注释行),那么一切都可以正常运行。我怀疑这是SDN和neo4j服务器之间的版本问题。这是我的POM: 它的父项作为依赖项Spring(核心、上下文、测试