propertysourcesplaceholderconfigurer propertysource propertyplaceholderconfigurer property example context application java spring spring-el spring-properties property-placeholder

propertysource - Spring @Value TypeMismatchException: no se pudo convertir el valor del tipo ''java.lang.String'' al tipo requerido ''java.lang.Double''



spring boot configuration properties (3)

Quiero usar la anotación @Value para inyectar una propiedad Double como:

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

y usando el marcador de posición de propiedad Spring (archivos de propiedades):

item.priceFactor=0.1

Me sale la excepción:

org.springframework.beans.TypeMismatchException: no se pudo convertir el valor del tipo ''java.lang.String'' al tipo requerido ''java.lang.Double''; la excepción anidada es java.lang.NumberFormatException: para la cadena de entrada: "$ {item.priceFactor}"

¿Hay alguna manera de usar un valor Double que provenga de un archivo de propiedades?


¿Qué tal almacenar una cadena y convertirla a números como números enteros y dobles a través de captadores y definidores? Para el código de seguridad con inyección de Java, siempre debe utilizar getters y setters y solo para otros métodos en cualquier caso. Le aconsejo encarecidamente que lea sobre la seguridad de java (que NO es para piratas informáticos), sino más para el uso del código y la escritura, así como el que cargó, que utiliza la inyección.


Esto deberia resolver el problema-

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


Intenta cambiar la siguiente línea

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

a

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