如何在Kotlin DSL中使用Spring HATEOAS“ linkTo”?

问题描述

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) }

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...