找不到能将[java.lang.String]类型转换为[java.util.LinkedHashMap <java.lang.string,java.lang.string =“”>]的转换器

时间:2018-12-17 08:15:38

标签: spring spring-boot yaml

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

4 个答案:

答案 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)

这可能与您调用配置属性的方式有关。

您是否尝试过重命名属性路径:

methodfilterChainDefinitions

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;

}