地图中的符号和特殊字符作为键通过 YML 文件
Symbols and special characters in maps as keys THROUGH YML FILE
是否可以在Java中map中的key中存储:
;
/
,
.
等字符通过application.yml?
映射
我试图通过 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 文件 执行此操作会导致此问题。
也许你可以像这样创建一个 URI:
URI uri = new URI("http", null, "localhost", "8080", "/my/api");
String uriAsString = uri.toASCIIString();
然后将其作为字符串设置到您的地图中。
我建议你看看这个 post,你可能会在那里找到解决方案:
是的
对于 java 中的示例,您只需正确转义它即可。
Map testmap=new HashMap<String,Object>();
Object testObject="a value Object";
testmap.put("http://localhost:8080",testObject);
for (Object s:testmap.keySet()) {
System.out.println(s);
}
将打印出:
Java HashMap 接受任何对象(字符串是一个对象)作为键!
此外,HashMap 不会 write/change 你的字符串。
我认为您的问题出在加载 .yml
Yaml 接受双引号中的特殊字符作为键。
- "http://localhost:8080"
检查你的序列化器/反序列化器
上有解释
你应该用方括号括起你的字符串
- '[http://localhost:8080]'
是的,可以在 String
键 Map
中使用像 : ; / , .
这样的字符,如果键是 String
类型,那么 Map 可以接受任何包含任意字符的字符串。
密钥应该是实现 equals
和 hashCode
方法的 class 类型。如果这些方法不可用,那么它们将从 Object
class 继承。
是否可以在Java中map中的key中存储:
;
/
,
.
等字符通过application.yml?
我试图通过 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 文件 执行此操作会导致此问题。
也许你可以像这样创建一个 URI:
URI uri = new URI("http", null, "localhost", "8080", "/my/api");
String uriAsString = uri.toASCIIString();
然后将其作为字符串设置到您的地图中。
我建议你看看这个 post,你可能会在那里找到解决方案:
是的
对于 java 中的示例,您只需正确转义它即可。
Map testmap=new HashMap<String,Object>();
Object testObject="a value Object";
testmap.put("http://localhost:8080",testObject);
for (Object s:testmap.keySet()) {
System.out.println(s);
}
将打印出:
Java HashMap 接受任何对象(字符串是一个对象)作为键! 此外,HashMap 不会 write/change 你的字符串。
我认为您的问题出在加载 .yml
Yaml 接受双引号中的特殊字符作为键。
- "http://localhost:8080"
检查你的序列化器/反序列化器
上有解释你应该用方括号括起你的字符串
- '[http://localhost:8080]'
是的,可以在 String
键 Map
中使用像 : ; / , .
这样的字符,如果键是 String
类型,那么 Map 可以接受任何包含任意字符的字符串。
密钥应该是实现 equals
和 hashCode
方法的 class 类型。如果这些方法不可用,那么它们将从 Object
class 继承。