GH-2989 - Make SpEL converter stringify primitive values

Resolves #2989
This commit is contained in:
Artem Bilan
2024-07-26 15:57:12 -04:00
committed by Oleg Zhurakousky
parent 6aa9062247
commit 268423327b

View File

@@ -69,7 +69,7 @@ public class SpelExpressionConverterConfiguration {
@Bean
@ConfigurationPropertiesBinding
@IntegrationConverter
public Converter<String, Expression> spelConverter(ConfigurableApplicationContext context) {
public Converter<Object, Expression> 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<String, Expression> {
public static class SpelConverter implements Converter<Object, Expression> {
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);