我在属性文件中有以下空属性:
test.prop=
当我尝试在我的 Spring 应用程序中使用该属性时,根据我使用的是原始类还是包装类,我得到了不同的结果。
@Value("${test.prop}")
Boolean testProp = true;
结果:正确
@Value("${test.prop}")
boolean testProp = true;
结果:IllegalArgumentException:无效的 boolean 值 []
与整数类似:
@Value("${test.prop}")
Integer testProp = 1;
结果:1
@Value("${test.prop}")
int testProp = 1;
结果:java.lang.NumberFormatException:对于输入字符串:“”
问题:
- 为什么基元会受到不同对待?
- 推荐使用什么类型?
- 如何为空属性设置默认值?
我尝试使用 ${test.prop:defaultValue}
设置默认值,但对于原语,我得到了相同的异常,对于包装类,我收到了 null
。
最佳答案
您在配置中拥有的“空属性”实际上是一个存在 属性,其值为空""
。该值用于尝试转换为属性类型。如果要使用默认值,请在属性文件中注释掉属性设置(或完全省略):
#test.prop=
并使用默认的@Value
语法:
@Value("${test.prop:true}") boolean booleanProp;
只有当属性中没有提供值时才应用默认值,而不是当它为空或无效时。上面的代码对于基元和包装器的工作方式相同。
关于java - Spring @Value 对待原语和包装类的方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50258087/