5

给定一个 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,甚至是key\u0020with\u0020space,但两者仍然像keywithspace地图一样结束。请指出使用 Spring application.properties 添加带空格键的正确方法进行映射,谢谢。

4

3 回答 3

4

我可以用不同的方法来做到这一点。

application.properties

key\u0020with\u0020space=test

在我想阅读的任何地方,自动装配的Environment对象。

@Autowired
private Environment env

并阅读属性

String test = env.getProperty("key with space");

在您的情况下,如果您知道带有空格的键,则可以读取该属性,然后将其放置在地图中。但是,如果您不完全了解它,则不确定如何处理。

于 2019-11-20T10:43:09.833 回答
4

碰巧遇到了同样的问题,我发现使用[]括号结合使用\ 或转义空格的技巧\u0020

myProperties.map.key1=value1
myProperties.map.key2=value2
myProperties.map.[key\ with\ space]=value3

这样,空白就保留在映射键中。

我无法找到这方面的文档,纯粹是通过反复试验偶然发现的。

于 2021-07-07T14:47:32.357 回答
1

对我来说,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;. 之后,您可以遍历列表并填写您的地图。

于 2020-11-03T07:47:36.633 回答