如何替换 SpEL 表达式中的字符串?

how to replace string in SpEL expression?

首先感谢关注
我在我的 spring 集成项目中定义了 ftp 适配器,并使用 mv 命令在 ftp 服务器中移动文件,目录结构是:
ftp-root
----------目录 1\
------------------在\
--------------------------file.in
------------------出\

我想移动 ftp-root\Directory1\in\ 目录中的文件 file.in 以移动 ftp-root\Directory1\out\ 扩展名 .out.rpt ftp-root\Directory1\out\a.out
我在 ftp 服务器上使用 int-ftp:outbound-gateway 适配器到 运行 mv 命令,我的代码是:

<int-ftp:outbound-gateway id="gatewayMv"
                          session-factory="ftpSessionFactory"
                          expression="payload.remoteDirectory + '/' + payload.filename"
                          request-channel="mvChannel"
                          command="mv"
                          rename-expression="payload.remoteDirectory + '/' + payload.filename "
                          reply-channel="aggregateResultsChannel"/>

如何使用 SpEL 表达式将重命名表达式选项中的 in 替换为 out

rename-expression="payload.remoteDirectory + '/' + payload.filename.replaceFirst('in', 'out')"

在大多数情况下,SpEL 的工作方式与常规 Java 相同。由于 filename 是一个 String 你可以为它申请任何字符串操作。

感谢@Artem Bilan 和@Gary 的回答
使用字符串的另一种方法 定义一个 bean 如下:

public class StringUtil {
    public String replacement(String value,String var1,String var2) {
        return value.replace(var1,var2);
    }
}

并在表达式选项中设置为:

rename-expression="@stringUtil.replacement(payload.remoteDirectory + '/' + payload.filename,'in','out')"