文件转换器
要将从文件系统读取的数据转换为对象,反之亦然,您需要进行一些处理。与 FileReadingMessageSource 不同(在较小程度上也与 FileWritingMessageHandler 不同),您可能需要自己的机制来完成这项工作。为此,您可以实现 Transformer 接口。或者,对于入站消息,您可以扩展 AbstractFilePayloadTransformer。Spring Integration 提供了一些明显的实现。
请参阅 Transformer 接口的 Javadoc 以查看哪些 Spring Integration 类实现了该接口。同样,你可以查看 AbstractFilePayloadTransformer 类的 Javadoc 以了解哪些 Spring Integration 类继承了它。
FileToByteArrayTransformer 继承自 AbstractFilePayloadTransformer,它通过使用 Spring 的 FileCopyUtils 将 File 对象转换为 byte[]。通常,使用一系列转换器比将所有转换逻辑放在单个类中更好。在这种情况下,将 File 转换为 byte[] 可能是一个合理的首要步骤。
FileToStringTransformer 继承自 AbstractFilePayloadTransformer,用于将 File 对象转换为 String。至少,这在调试时非常有用(可考虑与线路分接结合使用)。
要配置特定文件的转换器,可以使用文件命名空间中的相应元素,如下例所示:
<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 时(例如通常使用 Spring Integration 的情况),可以替代使用 AcceptOnceFileListFilter。