如何将带有空格的属性绑定到Spring application.properties文件中的Map键



给定一个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;。之后,您可以循环浏览列表并填写地图。

最新更新