如何在 Kotlin DSL 中使用 Spring HATEOAS "linkTo"?
How to use Spring HATEOAS "linkTo" with Kotlin DSL?
Spring HATEOAS 的 linkTo
方法有一个 Kotlin 变体,它为控制器采用具体化的类型参数,为主体采用函数:
org.springframework.hateoas.server.mvc WebMvcLinkBuilderDslKt.class public inline fun <reified C> linkTo(
func: C.() → Unit
): WebMvcLinkBuilder
但我不知道如何实际使用它,因为我没有找到任何有用的文档并且 API 不是很直观。我这样试过:
linkTo<MyHandler> { findById(req) }.toUriComponentsBuilder().build(mapOf("id" to 1)).toURL()
我认为使用周围方法的req
对象是错误的,如果link应该指向另一个方法。结果只是 http://localhost:8080
,没有任何路径或参数。
如何使用 Kotlin DSL 构建 link?
因为我正在使用 Spring WebMvc.fn: 是否有另一种方法可以使用此框架构建 links?
linkTo
函数的 func
参数是一个带有接收器 的 函数,其中接收器必须是 Spring 控制器。在函数内部,您应该调用控制器的方法之一。当 Spring HATEOAS 调用 func
时,它作为接收者传递,而不是实际控制器,而是代理。代理上的方法调用被拦截,并根据方法调用(包括方法调用参数)创建 link。
给定一个控制器:
@RestController
class TestController {
@RequestMapping("/test/{path-var}")
@ResponseBody
fun test(@PathVariable("path-var") pathVar: String,
@RequestParam("param") param: Int) = Response()
}
以下调用将产生 http://localhost:8080/test/any?param=123
linkTo<TestController> { test("any", 123) }
Spring HATEOAS 的 linkTo
方法有一个 Kotlin 变体,它为控制器采用具体化的类型参数,为主体采用函数:
org.springframework.hateoas.server.mvc WebMvcLinkBuilderDslKt.class public inline fun <reified C> linkTo(
func: C.() → Unit
): WebMvcLinkBuilder
但我不知道如何实际使用它,因为我没有找到任何有用的文档并且 API 不是很直观。我这样试过:
linkTo<MyHandler> { findById(req) }.toUriComponentsBuilder().build(mapOf("id" to 1)).toURL()
我认为使用周围方法的req
对象是错误的,如果link应该指向另一个方法。结果只是 http://localhost:8080
,没有任何路径或参数。
如何使用 Kotlin DSL 构建 link?
因为我正在使用 Spring WebMvc.fn: 是否有另一种方法可以使用此框架构建 links?
linkTo
函数的 func
参数是一个带有接收器 的 函数,其中接收器必须是 Spring 控制器。在函数内部,您应该调用控制器的方法之一。当 Spring HATEOAS 调用 func
时,它作为接收者传递,而不是实际控制器,而是代理。代理上的方法调用被拦截,并根据方法调用(包括方法调用参数)创建 link。
给定一个控制器:
@RestController
class TestController {
@RequestMapping("/test/{path-var}")
@ResponseBody
fun test(@PathVariable("path-var") pathVar: String,
@RequestParam("param") param: Int) = Response()
}
以下调用将产生 http://localhost:8080/test/any?param=123
linkTo<TestController> { test("any", 123) }