我想使用@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使用注射。