【问题标题】:Reading Monetary Amount from application.yml Spring boot从 application.yml Spring boot 中读取金额
【发布时间】:2021-12-03 07:24:37
【问题描述】:

我正在尝试从 application.yml 加载具有货币和金额的货币金额,例如:

financeAmt:
        value: 10000
        currency: EUR

我想使用 java Money API(javax.money) 或其任何实现,例如 org.javamoney.moneta.Money

但是 Spring boot 无法使用 @ConfigurationProperties 加载“financeAmt” 它设置为空。

如果我创建一个具有 vale 和 currency 属性的自定义类,它工作正常。

任何帮助如何在不创建自定义类和使用 java money api 的情况下加载此货币值。

【问题讨论】:

    标签: spring-boot


    【解决方案1】:

    Spring Boot 不知道如何将 String 转换为 org.javamoney.moneta.Money。如果您不依赖于格式,您可以提供 @ConfigurationPropertiesBinding 并使用如下配置设置:

    financeAmt:
      value: EUR 10000
    
    import org.javamoney.moneta.Money;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.boot.context.properties.ConfigurationPropertiesBinding;
    import org.springframework.core.convert.converter.Converter;
    import org.springframework.stereotype.Component;
    
    @Component
    @ConfigurationProperties("finance-amt")
    public class FinanceAmtConfig {
        private Money value;
    
        public Money getValue() {
            return value;
        }
    
        public void setValue(Money value) {
            this.value = value;
        }
    }
    
    @Component
    @ConfigurationPropertiesBinding
    class MoneyConverter implements Converter<String, Money> {
        @Override
        public Money convert(String source) {
            // Needs some error handling....
            return Money.parse(source);
        }
    }
    

    或者,如果您被绑定到配置格式,您可以只读取原始值,例如StringBigDecimal 并显式构建 Money 实例。

    【讨论】:

    • 谢谢@Andreas。以下配置有效:financeAmt:价值:10000 欧元我们不需要转换器,Spring 能够在没有它的情况下将其转换为 Money 对象。
    猜你喜欢
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 2014-09-15
    相关资源
    最近更新 更多