问题描述
Spring HATEOAS的linkTo
方法有一个Kotlin变体,该变体为Controller和身体函数采用了简化的类型参数:
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
对象是错误的。结果就是http://localhost:8080
,没有任何路径或参数。
如何与Kotlin DSL建立链接?
由于我使用的是Spring WebMvc.fn:是否有另一种方法来建立与此框架的链接?
解决方法
func
函数的linkTo
参数是带有接收器的函数,其中接收器必须是Spring控制器。在函数内部,您应该调用控制器的方法之一。当Spring HATEOAS调用func
时,它作为接收者而不是实际的控制器,而是一个代理传递。会拦截代理上的方法调用,并基于方法调用(包括方法调用参数)创建链接。
提供一个控制器:
@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) }