首页 > 解决方案 > Spring HATEOAS 未显示挂起函数的绝对 URL

问题描述

在向资源添加链接时,由挂起函数提供,它不会显示完整的 URL。例如,有两个实体 A 和 B,它们分别由普通函数和挂起函数返回:

资源 A:

internal data class AResource(val id: String, val name: String): RepresentationModel<AResource>() {
    init {
        add(buildSelfLink())
    }

   private fun buildSelfLink() = linkTo<ControllerA> { getAResourceById(id) }.withSelfRel()
}

输出:

{ 
    "id": "aId",
     "name": "a name", 
     "_links": {
          "self": { 
              "href": "http:/localhost:8080/v1.0/resources/a/aId"
          } 
      }
}

资源 B:

internal data class BResource(val id: String, val name: String): RepresentationModel<BResource>() {
    init {
        runBlocking { add(buildSelfLink() }
    }

   private suspend fun buildSelfLink() = linkTo<ControllerB> { getBResourceById(id) }.withSelfRel()
}

输出:

{ 
    "id": "bId",
     "name": "b name", 
     "_links": {
          "self": { 
              "href": "/v1.0/resources/b/bId"
          } 
      }
}

使用org.springframework.hateoas:spring-hateoas:1.3.5和 Spring Boot 2.5.2

编辑

我正在阅读这个问题,这是有道理的,因为在我们的用例中,我们使用withContext(Dispatchers.IO)了几个async块调用。

由于asyncDeffered,我意识到调用该方法并生成链接的线程与具有请求信息的线程不同。

改变withContext(Dispatchers.Unconfined)不是一种选择。

标签: spring-bootkotlinspring-hateoas

解决方案


推荐阅读