Spring @Value处理不同的原语和包装类

时间:2018-05-09 16:30:14

标签: java spring

我在属性文件中有以下空属性:

test.prop=

当我尝试在Spring应用程序中使用该属性时,取决于我是使用原始类还是包装类,我会得到不同的结果。

@Value("${test.prop}")
Boolean testProp = true;

结果 true

@Value("${test.prop}")
boolean testProp = true;

结果 IllegalArgumentException:无效的布尔值[]

与整数相似:

@Value("${test.prop}")
Integer testProp = 1;

结果 1

@Value("${test.prop}")
int testProp = 1;

结果 java.lang.NumberFormatException:对于输入字符串:“”

问题:

  • 为什么基元会被区别对待?
  • 建议使用哪种类型?
  • 如何设置空属性的默认值?

我尝试使用${test.prop:defaultValue}设置默认值,但对于原语,我得到相同的异常,对于我收到的包装类null

1 个答案:

答案 0 :(得分:3)

"空房产"您在配置中具有空值""现在属性。尝试转换为属性类型时使用此值。如果要使用默认值,请注释掉属性文件中的属性设置(或完全省略它):

 #test.prop=

并使用默认的@Value语法:

@Value("${test.prop:true}") boolean booleanProp;

默认设置仅在属性中未提供值时应用,而不是在其为空或无效时应用。上面的代码对原语和包装器的作用相同。