如何将 属性 与 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

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

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