文件转换器
要将从文件系统读取的数据转换为对象,反之亦然,你需要做一些工作。不像 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
。如果别无选择,这在调试时可能会很有用(考虑将其与 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 时)。