使用Java XmlMapper生成指定重复父标签XML的JSON结构咨询
使用Jackson XmlMapper生成指定XML结构的正确JSON写法
要生成你需要的<Months>包含多个<Month>标签的XML结构,你之前的JSON数组写法无法满足需求——因为XmlMapper默认会将数组元素的标签名设置为父节点的名称,最终生成<Months>嵌套<Months>的结构。以下是两种可行的解决方式:
方式一:调整JSON结构(无需额外配置)
直接在Months对象内定义名为Month的数组,XmlMapper会自动将数组元素映射为<Month>标签:
{ "Months": { "Month": ["May", "August", "November", "February"] } }
方式二:保留原有JSON结构,通过配置或注解实现
如果你想继续使用原来的JSON结构({"Months": ["May", ...]}),可以通过XmlMapper配置或Java类注解指定数组元素的标签名:
1. 直接配置XmlMapper
XmlMapper xmlMapper = new XmlMapper(); // 关闭XML声明(可选,按需调整) xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, false); // 禁用默认包装器,通过Mixin指定数组元素标签 xmlMapper.setDefaultUseWrapper(false); xmlMapper.addMixInAnnotations(List.class, MonthListMixin.class); // 定义Mixin类指定标签名 abstract class MonthListMixin { @JacksonXmlProperty(localName = "Month") public List<String> elements; }
2. 用Java实体类配合注解
定义对应实体类,通过注解明确标签规则:
public class MonthsWrapper { @JacksonXmlProperty(localName = "Month") @JacksonXmlElementWrapper(localName = "Months") private List<String> months; // 省略getter、setter方法 }
此时你原来的JSON结构可直接反序列化该类,再序列化就能得到目标XML。
内容的提问来源于stack exchange,提问作者DRISHTI KHANDELWAL
相关产品推荐
相关产品推荐

