@Value批注类型从字符串转换为整数

我正在尝试将值的输出转换为整数:

@Value("${api.orders.pingFrequency}")
private Integer pingFrequency;

以上抛出错误

org.springframework.beans.TypeMismatchException: 
    Failed to convert value of type 'java.lang.String' to required type 'java.lang.Integer'; 
nested exception is java.lang.NumberFormatException: 
    For input string: "(java.lang.Integer)${api.orders.pingFrequency}"

我也试过@Value("(java.lang.Integer)${api.orders.pingFrequency}")

谷歌似乎没有在这个问题上说太多。我希望始终处理整数,而不必在使用该值的任何地方解析此值。

解决方法

我意识到一个解决方法可能是使用setter方法来为我运行转换,但如果Spring可以做到这一点,我宁愿学习一些关于Spring的知识。


答案 1

假设您的类路径上有一个属性文件,其中包含

api.orders.pingFrequency=4

我在一个里面试过了@Controller

@Controller
public class MyController {     
    @Value("${api.orders.pingFrequency}")
    private Integer pingFrequency;
    ...
}

我的 servlet 上下文包含:

<context:property-placeholder location="classpath:myprops.properties" />

它完美地工作。

因此,您的属性不是整数类型,您没有正确配置属性占位符,或者您使用了错误的属性键。

我尝试使用无效的属性值运行。我得到的例外是4123;

java.lang.NumberFormatException: For input string: "4123;"

这让我认为你的财产的价值是

api.orders.pingFrequency=(java.lang.Integer)${api.orders.pingFrequency}

答案 2

我在互联网上寻找答案,我发现以下内容

@Value("#{new java.text.SimpleDateFormat('${aDateFormat}').parse('${aDateStr}')}")
Date myDate;

因此,在您的情况下,您可以尝试使用此功能

@Value("#{new Integer('${api.orders.pingFrequency}')}")
private Integer pingFrequency;

推荐