Использование классов Java внутри Spring @Value('#{SPEL})
Я хочу преобразовать значение свойства в настраиваемый объект. Пример; у меня есть application.properties; сказать
rules.peakHours.weekday.morning.start=10:15:45
И хотел бы преобразовать это свойство в объект java LocalTime.
@Configuration
public class RuleUtils {
@Value("#{localTime.parse(\"${rules.peakHours.weekday.morning.start}\")}")
public LocalTime weekDayMorningPeakStart;
Я пробовал следующее, но не помогло.
@Bean
@ConfigurationProperties("localTime")
// @EnableConfigurationProperties(LocalTime.class)
public Class<LocalTime> getLocalTime() {
return LocalTime.class;
}
Ошибка ниже:
EL1008E: Property or field 'localTime' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext'
Я пробовал web и stackoverflow, но не получил конкретного ответа. Пожалуйста помоги.
Единственный обходной путь, который я знаю для этого, - это внедрение конструктора; но это раздувает мой конструктор множеством аргументов
@Configuration
public class RuleUtils {
public LocalTime weekDayMorningPeakStart;
public RuleUtils(@Value("${rules.peakHours.weekday.morning.start}") String weekDayMorningPeakStart) {
this.weekDayMorningPeakStart = LocalTime.parse(weekDayMorningPeakStart);
}
1 ответ
Решение
Вы можете использовать шаблоны выражений для синтаксического анализа в LocalTime, например, show in docs
@Value("#{ T(java.time.LocalTime).parse('${rules.peakHours.weekday.morning.start}')}")
private LocalTime localTime;