我们希望将硬编码字符串附加到计算表达式。这可能是使用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)
由于
住
答案 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]");