首页 > 解决方案 > 映射中的符号和特殊字符通过 YML 文件作为键

问题描述

是否可以在通过 application.yml 映射: ; / , .的 Java 中的映射键中存储字符?

我正在尝试通过 application.yml 文件中的映射存储 URI 和与它们关联的值,但是由于它是一个键,它不会保存任何特殊字符

http://localhost:8080变成 httplocalhost8080

有什么办法可以保存那些丢失的角色吗?

~~编辑~~ 我已经尝试了转义字符、双引号和单引号,但是一旦它们在哈希图中,它们就会被忽略。

yml 文件中的属性具有以下结构:

  uri-example-config:
    keyToValueMap:
      http://localhost:8080 : String1
      http://exmaple.com: String2
      http://moreURIs.com: String2

然后我的配置是:

@Configuration
@ConfigurationProperties(prefix = "uri-example-config")
@EnableConfigurationProperties
@Getter
@Setter
public class URIProperties {
    private Map<String, String> keyToValueMap = new HashMap<>();
}

~~~~编辑2~~~~

是的,我可以轻松地 map.put(" http://localhost:8080 "...) 并且字符串按预期保留。通过带有配置和属性的yml 文件执行此操作会导致此问题。

标签: javaspringhashmapkeyspecial-characters

解决方案


Java HashMap 接受任何对象(字符串是对象)作为键! 此外,HashMap 不会写入/更改您的字符串。

我认为您的问题来自加载您的 .yml

如果在双引号中,Yaml 接受特殊字符作为键。

- "http://localhost:8080"

检查您的序列化器/反序列化器

编辑项目的github 上有解释

你应该用括号括住你的字符串

- '[http://localhost:8080]'

推荐阅读