Spring @ConfiurationProperties扩展毛泽东的麻烦

问题描述

我正在尝试使用Spring @Configuration和@ConfigurationProperties组合从config加载属性我有一个POJO扩展了HashMap ,并且内部有一个变量。 (请参见下面的MyConfigPojo)。在.yaml文件中,我具有相同的形状。但是,在启动应用程序时,尝试将defaultValue的字符串解析为Integer时出现错误

@Configuration
@ConfigurationPropeties(prefix = "my-config")
public class MyConfigPojo extends HashMap<Integer,String> {

  private String defaultValue;

  private String getValueForIdOrDefault(int id); // this.get(id) OR ELSE defaultValue
}

在配置中,我有这个:

myConfig:
  1: "my first value"
  23: "my 23rd value"
  defaultValue: "cheese"

哪个会导致

APPLICATION Failed TO START
Description:
Failed to bind properties under 'myPackage' to MyConfigPojo:
Property: myConfig[1]
Value: cheese

我认为那很奇怪,所以我打开了TRACE日志并发现了这个问题:

99 common frames omittedCaused by: java.lang.NumberFormatException: For input string: "defaultValue" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)

是否可以拦截读取此文件或告诉Spring如何正确设置值?

解决方法

您正尝试从.yml文件读取地图,为此,您需要足够的testAll()注释,不需要neverUseFullPath注释(如果使用Spring Boot)。如果您使用的是弹簧框架,则还需要@Configuration。

使用以下示例:

@ConfigurationProperties

MyConfigPojo.java

@Configuration

现在,您可以在任何地方(例如,在控制器类中)将此myConfig: map: 1: "my first value" 23: "my 23rd value" defaultValue: "cheese" 类自动布线,并读取那些映射键和值。

package com.org;


import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.HashMap;

@Configuration
@ConfigurationProperties(prefix = "my-config")
public class MyConfigPojo {

    private HashMap<String,String> map;

    public HashMap<String,String> getMap() {
        return map;
    }

    public void setMap(HashMap<String,String> map) {
        this.map = map;
    }
}

现在,您已经将键和值视为该Map的MyConfigPojo数据类型,您将不会获得@Autowired MyConfigPojo pojo;

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...