从 thymeleaf 访问默认的@ConfigurationProperties 属性

Acces default @ConfigurationProperties property from thymeleaf

我正在尝试使用 thymeleaf 阅读 属性,但无法正常工作。 我有以下 属性 class:

@Configuration
@ConfigurationProperties(prefix = "storage")
public class FileSystemStorageProperties {
    private String location = "image-dir";

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }
}

我正在尝试使用

读取 thymeleaf 中的位置 属性
${@environment.getProperty('storage.location')}

然而什么也没有显示。

编辑: 如果我在 application.properties 中设置 storage.location=to something else,它会起作用。但是thymeleaf为什么不选择默认值呢??

Spring不会根据变量名自动加载参数

您可以 annotate the getter method with @Bean 并按照您希望 属性 的方式命名它:

@Bean
public String location() {
    return location;
}

如果您想将 getter 方法命名为 getLocation(),您也可以通过设置 name of the @Bean:

@Bean(name="location")
public String getLocation() {
    return location;
}

If I set storage.location=to something else in application.properties, it works. But why doesn't thymeleaf pick the default value??

如果您在 application.propererties 中设置值,spring 会将其识别为 属性 并使用它。

如果不是,spring 认为它只是 getter 其他东西。

如果您将属性 class 更改为:

@Component("fileSystemStorageProperties") // Use @Component instead of @Configuration and give the bean an explicit name
@ConfigurationProperties(prefix = "storage")
public class FileSystemStorageProperties {
    private String location = "image-dir";

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }
}

然后你可以在 Thymeleaf 中这样做:

${@fileSystemStorageProperties.location}

有关详细信息,请参阅 https://www.thymeleaf.org/doc/articles/springmvcaccessdata.html#spring-beans