diff --git a/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/SpelExpressionConverterConfiguration.java b/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/SpelExpressionConverterConfiguration.java index 4b90f7680..9be6aa748 100644 --- a/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/SpelExpressionConverterConfiguration.java +++ b/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/SpelExpressionConverterConfiguration.java @@ -69,7 +69,7 @@ public class SpelExpressionConverterConfiguration { @Bean @ConfigurationPropertiesBinding @IntegrationConverter - public Converter spelConverter(ConfigurableApplicationContext context) { + public Converter spelConverter(ConfigurableApplicationContext context) { SpelConverter converter = new SpelConverter(); ConfigurableConversionService cs = (ConfigurableConversionService) context.getBeanFactory().getConversionService(); if (cs != null) { @@ -83,7 +83,7 @@ public class SpelExpressionConverterConfiguration { * * @author Eric Bottard */ - public static class SpelConverter implements Converter { + public static class SpelConverter implements Converter { private SpelExpressionParser parser = new SpelExpressionParser(); @@ -93,9 +93,12 @@ public class SpelExpressionConverterConfiguration { private EvaluationContext evaluationContext; @Override - public Expression convert(String source) { + public Expression convert(Object source) { try { - Expression expression = this.parser.parseExpression(source); + if (!(source instanceof String)) { + source = String.valueOf(source); // see https://github.com/spring-cloud/spring-cloud-stream/issues/2989 + } + Expression expression = this.parser.parseExpression((String) source); if (expression instanceof SpelExpression) { ((SpelExpression) expression) .setEvaluationContext(this.evaluationContext);