Spring Boot 转换器不适用于配置属性

Spring Boot converter not working for configuration properties

提问人:Kevin Day 提问时间:11/6/2023 更新时间:11/6/2023 访问量:24

问:

我正在尝试提供一个转换器来将application.yml中的r,g,b元组转换为Color对象。属性解析失败,并显示:“org.springframework.core.convert.ConverterNotFoundException:找不到能够从类型[java.lang.String]转换为类型[java.awt.Color]的转换器”

转换器是这样声明的:

@Component
public static class ColorConverter implements Converter<String, Color>{
    @Override
    public Color convert(String source) {
      ...
    }
}      

我的环境:

Spring Boot 2.7 (英语)

应用程序注释;

@SpringBootApplication(scanBasePackages = {"my.packages"})
@EnableTransactionManagement(mode=AdviceMode.ASPECTJ)
@EnableSpringConfigured

该应用程序确实具有 WebMvcConfigurer 子类

我还尝试过什么:

  1. 将@EnableConfigurationProperties添加到应用程序类。这没有区别。
  2. 确认转换器在启动期间注册(我在零参数构造函数上放置了一个断点)
  3. 在 WebMvcConfigurer 中注册转换器(这没有意义 - 我需要的转换器是属性解析,而不是 mvc 调用 - 但我还是试过了)。这没有区别。
spring-boot 属性 spring-properties

评论


答:

0赞 Kevin Day 11/6/2023 #1

终于找出了正确的谷歌搜索词。

解决方案是用@ConfigurationPropertiesBinding注释 Convert 类:

@ConfigurationPropertiesBinding
@Component
public static class ColorConverter implements Converter<String, Color>{
}

@EnableConfigurationProperties注解没有区别 - 听起来像是Spring Boot自动包含的(参考:https://www.baeldung.com/spring-enable-config-properties )