spring boot 2.1.1无法将yml配置读取到LinkedHashMap
这是我的课程
我提供了获取和设置功能。但这不起作用。
@Getter
@Setter
@Configuration
@ConfigurationProperties("shiro")
public class ShiroConfiguration {
private LinkedHashMap<String, String> filterChainDefinitions;
}
这是我的配置
shiro:
filterChainDefinitions:
/**: origin
这是错误消息
Description:
Failed to bind properties under 'shiro.filter-chain-definitions' to java.util.LinkedHashMap<java.lang.String, java.lang.String>:
Reason: No converter found capable of converting from type [java.lang.String] to type [java.util.LinkedHashMap<java.lang.String, java.lang.String>]
Action:
Update your application's configuration
答案 0 :(得分:0)
您可以使用配置属性。例如
@Component
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "shiro")
class YourComponent {
private HashMap<String, Integer> filterChainDefinitions;
public HashMap<String, Integer> getFilterChainDefinitionsta() {
return filterChainDefinitions;
}
public void setFilterChainDefinitions(HashMap<String, Integer> filterChainDefinitions) {
this.filterChainDefinitions= filterChainDefinitions;
}
}
答案 1 :(得分:0)
这可能与您调用配置属性的方式有关。
您是否尝试过重命名属性路径:
method
至filterChainDefinitions
和
filter
到
private LinkedHashMap<String, String> filterChainDefinitions;
?
由于错误的编码或转义,有时也会发生此类错误,但这似乎并非如此。
答案 2 :(得分:0)
尝试使用这样的块映射:
shiro:
filterChainDefinitions:
{}
当shiro.filterChainDefinitions的值为空时,它将被解释为空字符串。 YAML无法知道它应该是LinkedHashMap。使用空的块映射表示空的Hashmap。
从docs: 块映射是一系列条目,每个条目都有一个键:值对。
答案 3 :(得分:0)
@ConfigurationProperties无法从您的属性映射LinkedHashMap。您必须使用here
所不支持的SpEL要解决您的问题,可以通过添加@Value注释来更新配置,例如:
@Getter
@Setter
@Component
public class ShiroConfiguration {
@Value("#{${shiro.filter-chain-definitions}}")
private LinkedHashMap<String, String> filterChainDefinitions;
}