Изменение свойств bean-компонента Spring Expression Language с использованием других bean-компонентов - PullRequest
0 голосов
/ 11 мая 2019

У меня есть bean-компонент Customer со свойствами, такими как "creditAmount", я получаю его как тело запроса и хочу сохранить его в базе данных.Прежде чем сохранить его, я хочу применить выражение, например, если "creditamount" равно нулю или меньше 0, его следует установить равным 0.

У меня есть другой bean-компонент CustomerExpression со строковым свойством "creditAmountExpression", который заполняется из базы данных.с выражением "(creditAmount eq null или creditAmount le 0? 0: creditAmount)".

Так что теперь у меня есть два bean-компонента Customer и CustomerExpression, и я хочу динамически применять выражение из свойства "creditAmountExpression" bean-компонента CustomerExpression к "creditAmount "поля bean-объекта Customer и установите его значение.

Я пробовал использовать классы StandardEvaluationContext и SpelExpressionParser.Я могу получить значение выполнения выражения, но не могу изменить значение свойства без необходимости явного вызова setValue ().

@Autowired
SpelExpressionParser spelExpressionParser;

CustomerExpression customerExpression  = getCustomerExpression();//populate 
from database .i.e creditAmountExpression = (creditAmount eq null or creditAmount le 0 ? 0 : creditAmount)".

Customer cust = new Customer();//creditAmount is null here

StandardEvaluationContext sEvalContext = new StandardEvaluationContext(cust);
// we can get value as below but cant change it directly

 Integer value = spelExpressionParser.parseExpression(customerExpression.getCreditAmountExpression()).getValue(context,Integer.class);

над строкой возвращает 0, поскольку сумма кредита была нулевой, но я хочу изменить значение свойства

значение Customer.creditAmount должно быть обновлено до 0 после применения выражения из

CustomerExpression.getCreditAmountExpression()

То же самое должно быть возможно для всех свойств bean-компонента Customer, используя соответствующие свойства bean-компонента CustomerExpression.

...