Использование классов 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;
Другие вопросы по тегам