给定一个application.properties文件:
myProperties.map.key1=value1
myProperties.map.key2=value2
myProperties.map.key with space=value3
属性类别:
@ConfigurationProperties
public class MyProperties {
private Map<String, String> map;
// getters and setters
}
我曾试图逃离像key with space
甚至keyu0020withu0020space
这样的空间,但在地图中这两个空间最终都是keywithspace
。请指出使用Spring application.properties添加带空格键映射的正确方法,谢谢。
碰巧遇到同样的问题,我发现诀窍是使用[]
括号,并使用或
u0020
:转义空白
myProperties.map.key1=value1
myProperties.map.key2=value2
myProperties.map.[key with space]=value3
通过这种方式,空格被保留在map键中。
我找不到这方面的文件,纯粹是在试错中偶然发现的。
我可以用不同的方法来完成。
在application.properties
中
keyu0020withu0020space=test
无论我想在哪里阅读,都会自动连接Environment
对象。
@Autowired
private Environment env
并读取属性
String test = env.getProperty("key with space");
在您的情况下,如果您知道带空格的键,您可以读取属性,然后将其放置在地图中。但如果你不完全了解它,就不确定如何处理它。
对于包含非字母数字字符(-除外(的映射键,请将键名用[]括起来。
在您的示例中:'[myProperties.map.key with space]'=value3
请参阅https://github.com/spring-projects/spring-boot/wiki/Relaxed-Binding-2.0#maps了解更多详细信息。
对我来说,Spring甚至从键中删除了句点和非拉丁1字符(因此我使用YAML(。这就是为什么我最终得到了一个用分号分隔的值列表:
myMapAsList:
- key 1;value 1
- key 2 with äöü.;value 2
您需要一个包含字段键和值的包装类:
public class YourWrapper {
private String key;
private String value;
// getter & setter & constructor
}
加上一个转换器:
@Component
@ConfigurationPropertiesBinding
public class YourWrapperConverter implements Converter<String, YourWrapper>{
@Override
public YourWrapper convert(String source) {
String[] data = source.split(";");
return new YourWrapper(data[0], data[1]);
}
}
在您的属性类中:private List<YourWrapper> myMapAsList;
。之后,您可以循环浏览列表并填写地图。