【发布时间】:2019-06-18 03:36:02
【问题描述】:
请看下面的例子:
class Foo
class Bar
class Baz
@Component
class FooToBarConverter : Converter<Foo, Bar> {
override fun convert(source: Foo) = Bar()
}
@Component
class BarToBazConverter : Converter<Bar, Baz> {
override fun convert(source: Bar) = Baz()
}
@RestController("/test")
class TestController(val conversionService: ConversionService) {
@GetMapping
fun get() = "test: " + conversionService.convert(Foo(), Baz::class.java)
// must convert Foo to Bar, then Bar to Baz, but throws an exception instead
}
有什么方法可以在不重新发明轮子的情况下实现所需的行为?
【问题讨论】:
-
如您所说 将 Foo 转换为 Bar,然后将 Bar 转换为 Baz 。这样做,不要试图一口气做,因为那是行不通的。
-
@M.Deinum 不是最佳选择。它向调用者暴露了太多细节,使其知道
Bar(在编译时它甚至可能不存在于类路径中)以及它从Foo和Baz转换的可能性。我想隐藏这些细节。 -
然后创建一个执行此操作的转换。 Spring 不会检测到您想采取 3 个步骤从 x 转换为 z。你需要有一个明确的转换器。
标签: java spring spring-boot kotlin