Spring Boot能不能通过@Value注解 注入一个Map?

gooa
  • 225

yml配置文件

  info:
  health-code:
    101: 文件找不到
    202: 数据库连接不正确

java文件

@Value("${info.health-code}")
private Map<String,String> healthCodeMap;    

这样启动时就会报错,请问是哪里有问题呢?

回复
阅读 5.3k
2 个回答

yml 文件

input:
  name: raja
  age: 12
  somedata:
    abcd: 1
    bcbd: 2
    cdbd: 3

代码

/**
 * @author Richard_yyf
 * @version 1.0 2019/5/13
 */

@Component
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "input")
public class SomeData {


    @Value("${input.name}")
    private String name;

    @Value("${input.age}")
    private Integer age;

    private HashMap<String, Integer> somedata;

    public HashMap<String, Integer> getSomedata() {
        return somedata;
    }

    public void setSomedata(HashMap<String, Integer> somedata) {
        this.somedata = somedata;
    }
}
 @Autowired
    private SomeData someData;

    @RequestMapping("/123")
    public void ttt() {
        System.out.println(someData.getSomedata());
    }

结果

{abcd=1, bcbd=2, cdbd=3}

  1. 见[24.7.1 Loading YAML] https://docs.spring.io/spring...
  2. 见[@ConfigurationProperties vs. @Value] https://docs.spring.io/spring...

参照上面的回答,直接绑定。但是不建议这样做,会将已解耦合的程序耦合,应该将map拆分成单值利用注解绑定变量

你知道吗?

宣传栏