Spring @Value 类型不匹配异常:无法将类型"java.lang.String"的值转换为所需的类型"java.lang.Double"



我想使用@Value注释注入双重属性,例如:

@Service
public class MyService {
    @Value("${item.priceFactor}")
    private Double priceFactor = 0.1;
// ...

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

item.priceFactor=0.1

我得到异常:

org.springframework.beans.typemismatchexception:无法转换 类型为" Java.lang.string"的价值对所需类型的'java.lang.double'; 嵌套异常是java.lang.numberformatexception:for Input String: " $ {item.priceFactor}"

有没有一种方法可以使用来自属性文件的双重值?

尝试更改以下行

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

to

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

这应该解决问题 -

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

我也有类似的问题,但是required type 'java.lang.Double'required type 'java.lang.Long'。我正在使用Env。来自yaml文件的变量。事实证明,YAML不支持Long数据类型。

逻辑下面对我有用,而无需使用新的double:

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

春季将自动为您转换。

您忘记了@propertysource注释,属性文件名称为参数。

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

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

如何存储字符串并转换为像整数和二倍的数字?对于使用Java注入的安全代码,您应始终使用Getters和Setter,并且在任何情况下仅适用于其他方法。我热情地建议您阅读有关Java Security(这不是针对黑客)的信息,而更多地用于代码使用情况,并且同样地写了您上传的java安全性,Wich使用注射。

相关内容

最新更新