如何将对象数组转换为带方括号索引的Spring application.properties
问题
我正在使用Jackson将包含数组对象的数据转换为application.properties文件,但数组对象的转换结果不符合预期。
以下是我的代码:
JSONSerializer serializer = new JSONSerializer().rootName("application").prettyPrint(false); String json = serializer.serialize(configDto.getValue()); ObjectMapper om = new ObjectMapper(); JsonNode tree = om.readTree(json); Properties props; JavaPropsMapper mapper = new JavaPropsMapper(); props = mapper.writeValueAsProperties(tree); props.store(new FileOutputStream(file), "");
输入数据:
{ "nation": [ { "key": "France" }, { "key": "Spain" }, { "key": "England" } ], "movie": "Avatar 2" }
当前转换结果:
application.nation.1 = France application.nation.2 = Spain application.nation.3 = England application.movie = Avatar 2
期望的转换结果:
application.nation[1] = France application.nation[2] = Spain application.nation[3] = England application.movie = Avatar 2
请问如何实现符合预期的转换?
解决方案
要让Jackson的JavaPropsMapper生成带方括号的数组索引格式,需要自定义属性命名策略,替换默认的点分隔索引方式,具体操作如下:
- 继承
PropertyNamingStrategy,重写数组元素的命名逻辑,将.索引格式改为[索引]。 - 将自定义命名策略配置到
JavaPropsMapper实例中。
示例代码:
// 自定义属性命名策略,处理数组索引格式 class BracketArrayNamingStrategy extends PropertyNamingStrategy { @Override public String nameForArrayElement(PropertyName name, int index) { // Jackson内部数组索引从0开始,这里转成从1开始的格式 return name.getSimpleName() + "[" + (index + 1) + "]"; } } // 修改原代码中的Mapper配置部分 JavaPropsMapper mapper = new JavaPropsMapper(); mapper.setPropertyNamingStrategy(new BracketArrayNamingStrategy()); // 后续序列化逻辑保持不变 props = mapper.writeValueAsProperties(tree); props.store(new FileOutputStream(file), "");
内容的提问来源于stack exchange,提问作者An Duy
相关产品推荐
相关产品推荐

