如何在 Spring Boot 中使用 .和 / 符号?<String, Enum>

问题描述 投票:0回答:2
我有这个属性类别:

@Getter @Setter @Configuration @ConfigurationProperties(prefix = "app.prefix") public class SomeProperties { private Map<String, SomeEnum> someEnumMappings; }
在我的 application.yml 中:

app: prefix: someEnumMappings: "Name-1": SOME_ENUM_1 "Anthr. Name": SOME_ENUM_2
但我得到:

Failed to bind properties under 'app.prefix' to java.util.Map<java.lang.String, com.example.enums.SomeEnum>: Reason: org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.lang.String] to type [java.util.Map<java.lang.String, com.example.enums.SomeEnum>]
我可以做什么来预防它?

编辑:更改为建议的代码,仍然不起作用。有人可以指出参考文献的链接吗?医生为此?

java spring spring-boot
2个回答
1
投票
首先,您应该添加以下依赖项。

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
其次你的 application.yml 应该在下面

app: prefix: someEnumMappings: Name: SOME_ENUM_1 "Another_Name": SOME_ENUM_2
您应该在 Another Name 属性中使用下划线。

你应该在主类中添加

@EnableConfigurationProperties(SomeProperties.class)

不要忘记这些。!

    映射结构需要父键(someEnumMappings)
  • 包含空格的键应使用引号。
  • Java 类中的字段名称必须与 YAML 中的键名称匹配
完整代码如下。

应用程序.yml

spring: application: name: config-prop app: prefix: someEnumMappings: Name: SOME_ENUM_1 "Another_Name": SOME_ENUM_2
枚举

public enum SomeEnum { SOME_ENUM_1, SOME_ENUM_2 }
逻辑类

@Getter @Setter @Configuration @ConfigurationProperties(prefix = "app.prefix") @Component public class SomeProperties { private Map<String, SomeEnum> someEnumMappings; @Bean public String output() { someEnumMappings.forEach((key, value) -> System.out.println("Key: [" + key + "], Value: [" + value + "]")); SomeEnum name1 = someEnumMappings.get("Name"); SomeEnum name2 = someEnumMappings.get("Another_Name"); System.out.println("Name: " + name1); System.out.println("Another_Name: " + name2); return ""; } }
主课。

@SpringBootApplication @EnableConfigurationProperties(SomeProperties.class) public class ConfigPropApplication { public static void main(String[] args) { SpringApplication.run(ConfigPropApplication.class, args); } }
输出如下,

Key: [Name], Value: [SOME_ENUM_1] Key: [Another_Name], Value: [SOME_ENUM_2] Name: SOME_ENUM_1 Another_Name: SOME_ENUM_2
    

0
投票
找到答案。我的问题是拥有 .字符串键中的(点)。

所以在这种情况下我需要做的是将密钥括在“[]”中。

There 是 Spring Boot 参考的链接。文档。

© www.soinside.com 2019 - 2024. All rights reserved.