需要将多种类型作为源传递时,实现Spring的Converter接口的最佳方法

时间:2018-09-03 21:47:21

标签: java spring converters

您通常需要用一堆源对象制成目标对象。

我知道唯一的选择-创建一个包含所需类型作为其字段的上层综合类,并将其作为源传递给Spring Converter。但是也许有可能变得更容易?

谢谢。

1 个答案:

答案 0 :(得分:1)

默认情况下,Spring似乎没有提供一种界面,该界面公开了任何一种可以允许您接受多个源对象的功能。

根据定义,Converter的接口签名仅接受S,然后可以将其转换为T。如果Spring将来提供一个可以接受多个输入对象(例如SU)的接口,然后将其用于创建{{1} },但从Spring 5.x开始,该功能仍然不存在。

如果您确实要使用T接口的实现,则可以执行以下任一操作:

  • 如果要实例化自己,则可以很好地传递一个或多个 对象通过构造函数。这将意味着 实现类将开始有效地存储状态(即 在我看来,它取代了简单的转换器工作)。

  • 创建一个转换器,该转换器将接受一个进位对象作为源。
    这种模式很容易用于将两个对象转换为一个对象
    只需使用Spring Converter对象(假设您使用Spring
    数据)。与Pair有关的文档可以在here中找到。

假设您确实需要使用特定于Spring的转换器(在全局将它们全局注册到Pair的情况下,上述两种方法都应该可以正常工作。

现在,假设以上情况并非如此,那么没有什么可以阻止您使用本机JDK并使用FormatterRegistry的实现了。实际上,您可以更进一步,使该类成为BiFunction,这意味着您可以随时插入它。这样做的权衡?您将失去注册全局转换器的能力,但是,如果您的项目不使用全局转换器,那么代价是很小的(请注意,Component实现是线程安全的)。

最后,没有什么阻止您创建自己的Converter,在给定任何输入源的情况下,您都将使用它们来执行转换。

总而言之,Spring没有提供开箱即用的方法。本来不错,但似乎不可用。