【问题标题】:Using Java classes inside Spring @Value('#{SPEL})在 Spring @Value('#{SPEL}) 中使用 Java 类
【发布时间】:2021-05-17 03:50:25
【问题描述】:

我想将属性值解析为自定义对象。 例子;我有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);
    }

【问题讨论】:

  • @Value("#{localTime.parse@Value("#{LocalTime.parse ?
  • @user404 类访问和bean访问都试过了,不成功

标签: java spring-boot spring-expression-language


【解决方案1】:

您可以使用表达式模板来解析为LocalTime,如docs中所示

@Value("#{ T(java.time.LocalTime).parse('${rules.peakHours.weekday.morning.start}')}")
private LocalTime localTime;

【讨论】:

  • 好久不见! :) 伟大的!有效。如果您详细说明/暗示T 的必要性,这将很有帮助
  • 我相信这是一种定义对象类型的语法,您可以在附加文档中阅读更多信息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多