2014-12-24 3 views
0

Мы хотим добавить строчную кодированную строку в оцениваемое выражение. Возможно ли использование SPEL?spring 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) на sun.reflect.NativeMethodAccessorImpl.invoke0 (нативный метод) на sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) на Java. lang.reflect.Method.invoke (Method.java:601)

Благодаря

Lives

ответ

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]

Разница в том, клюв ause в первом случае список преобразуется в строку посредством службы преобразования, а не простой toString().

EDIT

К сожалению, я пропустил, что вы хотите получить список измененных значений, возвращаемых; приведенные выше решения производят строки.

префикс каждого значения, вам нужно использовать Collection Projection ...

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

Спасибо за ваше время и подробного объяснения. Попробуй это. – lives

+0

Обновлена ​​трасса исключения. Я пробовал как с, так и без toString. После конкатенации строк не будет оценен вывод по-прежнему списка ? – lives

+0

Я хочу, чтобы конечный результат был foofoo, foobar в вашем примере. Basicaly «foo» должен быть префикс для каждой строки в коллекции – lives