Spring @Value TypeMismatchException: Не удалось преобразовать значение типа "java.lang.String" в требуемый тип "java.lang.Double"

Я хочу использовать аннотацию @Value, чтобы ввести свойство Double, например:

@Service
public class MyService {

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

// ...

и использование Spring place placeholder (Свойства файлов):

item.priceFactor=0.1

Я получаю исключение:

org.springframework.beans.TypeMismatchException: Не удалось преобразовать значение типа "java.lang.String" в требуемый тип "java.lang.Double"; inested exception is java.lang.NumberFormatException: для строки ввода: "$ {item.priceFactor}"

Есть ли способ использовать двойное значение, поступающее из файла свойств?

Ответы

Ответ 1

Попробуйте изменить следующую строку

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

в

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

Ответ 2

Это должно решить problem-

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

Ответ 3

Как насчет сохранения строки и преобразования в числа, такие как целые числа и удваивается через геттеры и сеттеры? Для безопасного кода с Java-инъекцией вы всегда должны использовать геттеры и сеттеры и только для других методов в любом случае. Я советую вам тепло читать информацию о безопасности Java (что НЕ для хакеров), но больше для использования кода и написания аналогично тому, который вы загрузили, который использует инъекции.