spring-boot - 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
块调用。
由于async
是Deffered
,我意识到调用该方法并生成链接的线程与具有请求信息的线程不同。
改变withContext(Dispatchers.Unconfined)
不是一种选择。
解决方案
推荐阅读
- c - SDL_RenderDrawRect 少了一个像素
- list - 以某种顺序选择列表的元素并使用 R 存储在列表中
- puppeteer - 如何在 openSUSE Leap 42.3 上安装 puppeteer 依赖项?
- css - 如何为 JavaFX 控件的子组件内联 CSS
- android - 锁定错误后如何处理生物识别提示?
- node.js - 在端口 80(动态端口)上访问节点服务器的问题
- php - Smarty:未定义的扩展类“Smarty_Internal_Method_Get_Template_Vars”
- php - 如何使用php生成mega.nz直接下载链接
- c++ - 不能遍历链表
- python - sys.argv[1][-4:] 脚本含义