Spring @Value TypeMismatchException:Failed 将类型 'java.lang.String' 的值转换为所需类型 'java.lang.Double'

Spring @Value TypeMismatchException:Failed to convert value of type 'java.lang.String' to required type 'java.lang.Double'

我想使用@Value 注解来注入一个 Double 属性 例如:

@Service
public class MyService {

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

// ...

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

item.priceFactor=0.1

我得到异常:

org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Double'; nested exception is java.lang.NumberFormatException: For input string: "${item.priceFactor}"

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

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

这应该可以解决问题-

@Value("#{T(Double).parseDouble('${item.priceFactor}')}")
private Double priceFactor;

尝试更改以下行

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

@Value("#{new Double('${item.priceFactor}')}")

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

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

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

请在 https://github.com/bojanantonovic/spring-properties-demo.

寻找使用@Configuration(@Service 的超级类型)的有效解决方案