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 的超级类型)的有效解决方案
我想使用@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 的超级类型)的有效解决方案