当我尝试使用我在application.properties中设置的整数时,我一直收到java.lang.NumberFormatException:null错误。
这是我的application.properties
my.prop.for.func=25
这是我从.properties文件中检索值并将其转换为稍后在函数中使用的整数的方法。
@Value("${my.prop.for.func}")
private String myPropForFuncStr;
private int myPropForFunc = Integer.parseInt(myPropForFuncStr);
我尝试了将属性转换为整数的其他方法,例如 @Value("#{new int(' $ {my.prop.for.func}')}")但他们给出了其他错误,这似乎是最简单的方法。
我可能收到NumberFormatException:Null错误,因为myPropForFuncStr为null。我总是从.properties文件中检索这样的值,所以为什么它现在搞乱了?如果这不是问题,还有什么可以给出NumberFormatException:Null错误?
答案 0 :(得分:3)
首先,Spring框架已经为您处理了自动装箱。这意味着您可以直接将注释添加到int变量中。
@Value("${my.prop.for.func}")
private Integer myPropForFunc; // Note that this needs to be an object and not a primitive data type.
现在,针对您的问题,您可能想要检查您的班级是否已使用@PropertySource
注释进行注释。如果您使用Spring启动来初始化您的应用程序,那么它应该自动读取您的application.properties
文件并将这些属性适当地注入字段。但如果不是,那么您需要使用@PropertySource
注释来注释您的班级。即使你使用Spring启动,你的设置也不会有效,因为在成功初始化bean之后将评估@Value
,但是你在字段本身初始化myPropForFunc
的值。
这是一个显示注释用法的示例。 https://www.mkyong.com/spring/spring-propertysources-example/
答案 1 :(得分:1)
Spring在实例化后使用带注释的属性初始化类。这意味着,在spring加载属性之前将调用“Integer.parseInt”调用,因为该类已经初始化了。
您有几种方法可以解决这个问题:
使用@PostConstruct注释编写void init方法。在此方法中,所有与弹簧相关的信息都已加载。
编写一个getter,它总是在运行时解析为整数调用
我认为春天也可以处理:
@Value( “$ {my.prop.for.func}”) private Integer myPropForFuncInt;
答案 2 :(得分:0)
myPropForFuncStr
。
我建议直接在@Value
myPropForFunc
@Value("${my.prop.for.func}")
private int myPropForFunc = Integer.parseInt(myPropForFuncStr);