文件转换器

要将从文件系统读取的数据转换为对象,反之亦然,您需要做一些工作。 与 FileReadingMessageSource 不同,并且在较小程度上与 FileWritingMessageHandler 不同,您可能需要自己的机制来完成这项工作。 为此,您可以实现 Transformer 接口。 或者,您可以为入站消息扩展 AbstractFilePayloadTransformer。 Spring Integration 提供了一些显而易见的实现。

请参阅 Javadoc for the Transformer interface 以查看哪些 Spring Integration 类实现了它。 同样,您可以查看 Javadoc for the AbstractFilePayloadTransformer class 以查看哪些 Spring Integration 类扩展了它。

FileToByteArrayTransformer 扩展了 AbstractFilePayloadTransformer,并使用 Spring 的 FileCopyUtilsFile 对象转换为 byte[]。 通常,使用一系列转换器比将所有转换放在一个类中更好。 在这种情况下,Filebyte[] 的转换可能是一个合乎逻辑的第一步。

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 时)。