Я пишу некоторый код, чтобы разрешить динамические изменения свойств, используя язык выражений Spring.Я передаю имя компонента, имя свойства и выражение для нового значения, все строки.
Это прекрасно работает для свойств типа string, int, boolean и list.Я не могу заставить свойство карты работать.Я посмотрел на документацию SPeL, включая примеры, но я не вижу ничего плохого в том, что я делаю.Исключение, которое я получаю, бесполезно.
Игнорирование блоков try / catch, основной код выглядит так:
ExpressionParser parser = new SpelExpressionParser();
Expression parsedPropertyNameExpression = parser.parseExpression(propertyName);
SimpleEvaluationContext evalContext = SimpleEvaluationContext.forReadWriteDataBinding().build();
Object currentValue = parsedPropertyNameExpression.getValue(evalContext, bean);
parsedPropertyNameExpression.setValue(evalContext, bean, expression);
Когда мое "выражение" равно "789, 0123, 345"и свойство, которое я устанавливаю, является списком, это прекрасно работает.
Однако, когда я устанавливаю свойство типа Map (""), где значение выражения равно "{abc: 'def', ghi:' jkl '} ", я получаю следующее исключение:
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.lang.String] to type [java.util.Map<java.lang.String, java.lang.String>]
Я пробовал разные варианты этой строки выражения, в основном с тем же результатом.
Обновление :
Я заметил следующее сообщение SO: Как добавить карту с помощью аннотации @Value Spring? .
Упоминается один из непринятых ответовопределяя Map в свойствах и добавляя ее с помощью аннотации @Value, которая, я думаю, использует аналогичный механизм.Как я могу сделать это в коде?