spring SPEL将硬编码字符串添加到表达式中

时间:2014-12-24 07:14:19

标签: spring spring-el

我们希望将硬编码字符串附加到计算表达式。这可能是使用SPEL吗?

示例:

我有一个Employee类,它有一个String集合。 List<String> codes;

我可以使用以下表达式获取此集合。

expression = expressionParser.parseExpression("codes");
List<String> evaluatedCodes = (List<String>) expression.getValue(evaluationContext);
System.out.println(" evaluatedCodes " + evaluatedCodes);

我想在输出前加一个字符串。

expression = expressionParser.parseExpression("'PREFIX' + codes");
List<String> evaluatedCodes = (List<String>) expression.getValue(evaluationContext);
System.out.println(" evaluatedCodes " + evaluatedCodes);

这不起作用。有什么办法可以在输出前加上硬编码字符串吗?

我得到以下异常

java.lang.ClassCastException:java.lang.String无法强制转换为java.util.List     在com.muhad.spel.ExampleConfigurationTests.testSPEL(ExampleConfigurationTests.java:103)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     在java.lang.reflect.Method.invoke(Method.java:601)

由于

1 个答案:

答案 0 :(得分:0)

请展开

  

它不起作用。

我刚试过它,它对我来说很好......

public class Foo {

    public List<String> getCodes() {
        return Arrays.asList(new String[] {"foo", "bar"});
    }
}

...
    Expression e = new SpelExpressionParser().parseExpression("'foo' + codes");
    Object value = e.getValue(evalCtx, new Foo());
    System.out.println(value);

生成foofoo,bar

    Expression e = new SpelExpressionParser().parseExpression("'foo' + codes.toString()");

生成foo[foo, bar]

不同之处在于,在第一种情况下,转换服务将列表转换为字符串,而不是简单的toString()

修改

抱歉,我错过了您想要返回的修改值列表;上述解决方案产生了字符串。

要为每个值添加前缀,您需要使用Collection Projection ...

Expression e = new SpelExpressionParser().parseExpression("codes.!['foo' + #this]");