文件转换器
要将从文件系统读取的数据转换为对象,反之亦然,您需要做一些工作。
与 FileReadingMessageSource
不同,并且在较小程度上与 FileWritingMessageHandler
不同,您可能需要自己的机制来完成这项工作。
为此,您可以实现 Transformer
接口。
或者,您可以为入站消息扩展 AbstractFilePayloadTransformer
。
Spring Integration 提供了一些显而易见的实现。
请参阅 Javadoc for the Transformer
interface 以查看哪些 Spring Integration 类实现了它。
同样,您可以查看 Javadoc for the AbstractFilePayloadTransformer
class 以查看哪些 Spring Integration 类扩展了它。
FileToByteArrayTransformer
扩展了 AbstractFilePayloadTransformer
,并使用 Spring 的 FileCopyUtils
将 File
对象转换为 byte[]
。
通常,使用一系列转换器比将所有转换放在一个类中更好。
在这种情况下,File
到 byte[]
的转换可能是一个合乎逻辑的第一步。
FileToStringTransformer
扩展了 AbstractFilePayloadTransformer
,将 File
对象转换为 String
。
如果没什么别的用处,这对于调试也很有用(考虑将其与 wire tap 一起使用)。
要配置特定于文件的转换器,您可以使用文件命名空间中的相应元素,如以下示例所示:
<int-file:file-to-bytes-transformer input-channel="input" output-channel="output"
delete-files="true"/>
<int-file:file-to-string-transformer input-channel="input" output-channel="output"
delete-files="true" charset="UTF-8"/>
delete-files
选项向转换器发出信号,表示它应该在转换完成后删除入站文件。
这绝不能替代在多线程环境中使用 FileReadingMessageSource
时使用 AcceptOnceFileListFilter
(例如,当您通常使用 Spring Integration 时)。