java - 在 Spring @Value('#{SPEL}) 中使用 Java 类

标签 java spring-boot spring-expression-language

我想将属性值解析为自定义对象。 例子;我有 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,但没有得到具体的答案。 请帮忙。

我知道的唯一解决方法是构造函数注入(inject);但这会使我的构造函数因许多参数而膨胀

@Configuration
public class RuleUtils {

    public LocalTime weekDayMorningPeakStart;

    public RuleUtils(@Value("${rules.peakHours.weekday.morning.start}") String weekDayMorningPeakStart) {
         this.weekDayMorningPeakStart = LocalTime.parse(weekDayMorningPeakStart);
    }

最佳答案

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

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

关于java - 在 Spring @Value('#{SPEL}) 中使用 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67563799/

相关文章:

java - (Jacoco) 传送到 Apache Spark 的代码的代码覆盖率?

java - 如何在Android应用程序中添加好友?

cassandra - 如何使用 Spring boot 初始化 Cassandra 键空间和表

java - 成功登录后 Spring Boot Security 重定向 - 未定义

java - 如何通过 Spring-Expression-Language 或其他方式根据 jobParameters 有条件地注入(inject) bean?

java - 强制 Spring RestTemplate 忽略响应的内容类型 header

java - 将路径传递给 exec

带有过滤器 permitAll 的 Spring Security 不起作用

spring - Thymeleaf 中的过滤整数列表