java - Spring @Value 对待原语和包装类的方式不同

标签 java spring

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

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/

相关文章:

java - 覆盖 Guice 中的绑定(bind)或子模块

java - 如何迁移到新的 TokenBasedRememberMeServices API

java - 通过字段 'springSecurityFilterChain' 表示的不满足的依赖关系

java - 使用 Android Studio 3.4 android.support.v7.widget.CardView(修复构建路径、编辑 XML、创建类)

java - Toast 正在从附加了后台线程的处理程序中显示。不确定那是怎么发生的?

java - 程序由于变量 “may be uninitialized”而无法运行?

java - 单元测试用例中的空 @Autowired beans

spring - 我应该为 GWT 应用程序构建 REST 后端吗

spring - JAVA spring (JPA)中的PostgreSQL + Elasticsearch同步

java - 在 hibernate : is it possible to mix Annotations and XML configuration for an Entity?