java—当属性为空时,将值设置为默认值

soat7uwm  于 2021-07-16  发布在  Java
关注(0)|答案(3)|浏览(2466)

我在配置文件中有一个属性,如:

@Value("${MAX_VALUE:#{100}}")
private int maxSize;

在属性文件中,我有:

MAX_VALUE=

我正在使用java配置

@Bean
public EncryptablePropertyPlaceholderConfigurer defaultProperties() {
    final EncryptablePropertyPlaceholderConfigurer defaultProperties = new EncryptablePropertyPlaceholderConfigurer(
            textEncryptor());
    Resource[] resources = new ClassPathResource[] { new ClassPathResource(jobProperties)};
    defaultProperties.setLocations(resources);
    defaultProperties.setIgnoreUnresolvablePlaceholders(true);
    defaultProperties.setIgnoreResourceNotFound(true);
    defaultProperties.setSearchSystemEnvironment(true);
    return defaultProperties;
}

当最大值参数未设置时,我希望它使用默认值。当前它给我一个“numberformatexception:for input string:”“”
是否有任何方法可以实现这一点,或者我必须从属性文件中删除max\ u值才能使用默认值?

wa7juj8i

wa7juj8i1#

下面的spel表达式似乎适用于null(中缺少 application.yaml ),空值和有效数字:

@Value("#{'${MAX_VALUE:}' matches '\\d+' ? '${MAX_VALUE:1}' : 100 }")
private int maxSize;

这里创建一个字符串值 MAX_VALUE 使用空值作为默认值。
如果此值与 int (非负)模式,按原样使用,否则为默认值 100 提供。

vltsax25

vltsax252#

不能有空字符串 int 类型,但可以将类型更改为 Integer 并且拥有 null 使用spring表达式语言检查默认值

@Value("#{'${MAX_VALUE}' ?: 0}")
private Integer maxSize;
envsm3lx

envsm3lx3#

我没有意识到spring表达式langauge支持三元运算符。我通过以下方法解决了上述问题:

@Value("${MAX_VALUE != '' ? MAX_VALUE:#{100}}")
private int maxSize;

有关spel的更多信息

相关问题