您通常需要用一堆源对象制成目标对象。
我知道唯一的选择-创建一个包含所需类型作为其字段的上层综合类,并将其作为源传递给Spring Converter。但是也许有可能变得更容易?
谢谢。
答案 0 :(得分:1)
默认情况下,Spring似乎没有提供一种界面,该界面公开了任何一种可以允许您接受多个源对象的功能。
根据定义,Converter
的接口签名仅接受S
,然后可以将其转换为T
。如果Spring将来提供一个可以接受多个输入对象(例如S
,U
)的接口,然后将其用于创建{{1} },但从Spring 5.x开始,该功能仍然不存在。
如果您确实要使用T
接口的实现,则可以执行以下任一操作:
如果要实例化自己,则可以很好地传递一个或多个 对象通过构造函数。这将意味着 实现类将开始有效地存储状态(即 在我看来,它取代了简单的转换器工作)。
创建一个转换器,该转换器将接受一个进位对象作为源。
这种模式很容易用于将两个对象转换为一个对象
只需使用Spring Converter
对象(假设您使用Spring
数据)。与Pair
有关的文档可以在here中找到。
假设您确实需要使用特定于Spring的转换器(在全局将它们全局注册到Pair
的情况下,上述两种方法都应该可以正常工作。
现在,假设以上情况并非如此,那么没有什么可以阻止您使用本机JDK并使用FormatterRegistry
的实现了。实际上,您可以更进一步,使该类成为BiFunction
,这意味着您可以随时插入它。这样做的权衡?您将失去注册全局转换器的能力,但是,如果您的项目不使用全局转换器,那么代价是很小的(请注意,Component
实现是线程安全的)。
最后,没有什么阻止您创建自己的Converter
,在给定任何输入源的情况下,您都将使用它们来执行转换。
总而言之,Spring没有提供开箱即用的方法。本来不错,但似乎不可用。