38

我想使用 @Value 注释来注入 Double 属性,例如:

@Service
public class MyService {

    @Value("${item.priceFactor}")
    private Double priceFactor = 0.1;

// ...

并使用 Spring 属性占位符(属性文件):

item.priceFactor=0.1

我得到例外:

org.springframework.beans.TypeMismatchException:无法将“java.lang.String”类型的值转换为所需的“java.lang.Double”类型;嵌套异常是 java.lang.NumberFormatException: For input string: "${item.priceFactor}"

有没有办法使用来自属性文件的 Double 值?

4

5 回答 5

72

尝试更改以下行

@Value("${item.priceFactor}")

@Value("#{new Double('${item.priceFactor}')}")
于 2017-03-11T13:08:50.877 回答
6

这应该可以解决问题-

@Value("#{T(Double).parseDouble('${item.priceFactor}')}")
private Double priceFactor;
于 2017-03-11T11:26:32.713 回答
1

required type 'java.lang.Double'我有一个类似的问题,但不是required type 'java.lang.Long'。我正在使用环境。YAML 文件中的变量。原来 YAML 不支持Long数据类型。

于 2021-05-20T00:24:17.630 回答
0

您忘记了将属性文件名称作为参数的 @PropertySource 注释。

它应该出现在您的 @Service 注释之前或之后。

请在https://github.com/bojanantonovic/spring-properties-demo中使用 @Configuration(@Service 的超类型)寻找可行的解决方案。

于 2021-12-20T12:27:00.773 回答
-2

如何存储字符串并通过 getter 和 setter 转换为整数和双精度数等数字?对于 Java 注入的安全代码,您应该始终使用 getter 和 setter,并且在任何情况下都只能用于其他方法。我强烈建议您阅读有关 java 安全性的内容(这不适合黑客),但更多的是用于代码使用和编写同样您上传的那个,它使用注入。

于 2017-03-11T11:01:34.813 回答