Spring 声明式 REST 客户端,在 URL 中具有自定义类型

问题描述 投票:0回答:1

我正在尝试 Springs 声明式 REST 客户端(使用 org.springframework.web.client.RestClient)。

我有一个包装纸:

@JvmInline
value class CustomId(val id: String)

现在我想在我的界面中使用该包装器:

interface FooClient {

    @GetExchange(value = "/service/{id}")
    fun hamtaTaxeringsenhet(@PathVariable id: CustomId): Bar
}

这样做的问题是 Spring 使用其

CustomId
函数转换
toString()
并将其发送到下游服务器。

如果我使用 String 而不是我的自定义类型,它会起作用:

interface FooClient {

    @GetExchange(value = "/service/{id}")
    fun hamtaTaxeringsenhet(@PathVariable id: String): Bar
}

但是我想要类型安全,所以我不想使用 String。 我也不想重写 CustomId 的 toString() 函数。

有什么想法可以让 Spring 自动将 CustomId 转换为字符串(CustomId.id)吗?

问候,彼得

spring spring-mvc
1个回答
0
投票

当然,我在发布问题几分钟后自己找到了答案,尽管我花了几个小时搜索并尝试了很多东西! :D

我在没有 ConversionService 的情况下设置了 FooClient,现在当我这样做时它可以工作了:

@Bean
fun fooClient(restClient: RestClient, conversionService: ConversionService): FooClient {
    return HttpServiceProxyFactory
        .builderFor(RestClientAdapter.create(restClient))
        .conversionService(conversionService) // <- Added this
        .build()
        .createClient(FooClient::class.java)
}
© www.soinside.com 2019 - 2024. All rights reserved.