如何将 属性 与 space 绑定到 Spring application.properties 文件中的映射键?
How to bind a property with space to Map key in Spring application.properties file?
给定一个 application.properties 文件:
myProperties.map.key1=value1
myProperties.map.key2=value2
myProperties.map.key with space=value3
和属性class:
@ConfigurationProperties
public class MyProperties {
private Map<String, String> map;
// getters and setters
}
我曾尝试像 key\ with\ space
甚至 key\u0020with\u0020space
这样的 space 转义,但两者在地图中仍然以 keywithspace
结束。请指出使用 space 映射到 Spring application.properties 的正确方法,谢谢。
我可以用不同的方法来做。
在application.properties
key\u0020with\u0020space=test
无论我想阅读什么,自动装配 Environment
对象。
@Autowired
private Environment env
并阅读 属性
String test = env.getProperty("key with space");
在你的情况下,如果你知道带空格的键,你可以阅读 属性 然后将它放在地图中。但是,如果您不完全了解它,则不确定如何处理它。
对我来说,Spring 甚至从密钥中删除了句点和 non-Latin 1 个字符(因此我使用 YAML)。这就是为什么我最终得到一个列表,其中的值用分号分隔:
myMapAsList:
- key 1;value 1
- key 2 with äöü.;value 2
您需要一个包含字段键和值的包装器 class:
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]);
}
}
在您的属性中 class:private List<YourWrapper> myMapAsList;
。之后您可以遍历列表并填充您的地图。
发生在 运行 相同的问题中,我发现使用 []
括号结合使用 \
或 \u0020
转义空格的技巧:
myProperties.map.key1=value1
myProperties.map.key2=value2
myProperties.map.[key\ with\ space]=value3
这样空格就保留在映射键中。
我找不到这方面的文档,纯粹是通过反复试验偶然发现的。
给定一个 application.properties 文件:
myProperties.map.key1=value1
myProperties.map.key2=value2
myProperties.map.key with space=value3
和属性class:
@ConfigurationProperties
public class MyProperties {
private Map<String, String> map;
// getters and setters
}
我曾尝试像 key\ with\ space
甚至 key\u0020with\u0020space
这样的 space 转义,但两者在地图中仍然以 keywithspace
结束。请指出使用 space 映射到 Spring application.properties 的正确方法,谢谢。
我可以用不同的方法来做。
在application.properties
key\u0020with\u0020space=test
无论我想阅读什么,自动装配 Environment
对象。
@Autowired
private Environment env
并阅读 属性
String test = env.getProperty("key with space");
在你的情况下,如果你知道带空格的键,你可以阅读 属性 然后将它放在地图中。但是,如果您不完全了解它,则不确定如何处理它。
对我来说,Spring 甚至从密钥中删除了句点和 non-Latin 1 个字符(因此我使用 YAML)。这就是为什么我最终得到一个列表,其中的值用分号分隔:
myMapAsList:
- key 1;value 1
- key 2 with äöü.;value 2
您需要一个包含字段键和值的包装器 class:
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]);
}
}
在您的属性中 class:private List<YourWrapper> myMapAsList;
。之后您可以遍历列表并填充您的地图。
发生在 运行 相同的问题中,我发现使用 []
括号结合使用 \
或 \u0020
转义空格的技巧:
myProperties.map.key1=value1
myProperties.map.key2=value2
myProperties.map.[key\ with\ space]=value3
这样空格就保留在映射键中。
我找不到这方面的文档,纯粹是通过反复试验偶然发现的。