I want to use the @Value annotation to inject a Double property such as:
@Service
public class MyService {
@Value("${item.priceFactor}")
private Double priceFactor = 0.1;
// ...
and using Spring property placeholder (Properties files):
item.priceFactor=0.1
I get Exception:
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}"
Is there a way to use a Double value coming from a properties file?
Try changing the following line
@Value("${item.priceFactor}")
to
@Value("#{new Double('${item.priceFactor}')}")
This should solve the problem-
@Value("#{T(Double).parseDouble('${item.priceFactor}')}")
private Double priceFactor;
I had a similar problem but instead of required type 'java.lang.Double' it was required type 'java.lang.Long'. I was using env. variables from a YAML file. Turns out YAML doesn't support the Long data type.