У меня есть 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.