如何仅使用杰克逊并自行定义根元素将ArrayList变量转换为XML

时间:2019-05-06 06:01:11

标签: java jackson

我一直在使用Jackson来将Object转换为XML,但是现在的要求是仅将ArrayList变量从对象转换为XML。当我将ArrayList包装到对象中然后转换对象时,它工作正常,但是当我只想将列表转换为XML时。我无法在XML中获得所需的根元素和项目名称。

ObjectMapper objectMapper = new XmlMapper();
JacksonXmlModule xmlModule = new JacksonXmlModule();
xmlModule.setDefaultUseWrapper(false);
ObjectMapper objectMapper = new XmlMapper(xmlModule);
objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
String xml = objectMapper.writeValueAsString(input);

我要转换的变量:

@JacksonXmlElementWrapper(localName = "user")
List<USER> userList = new ArrayList<>();

我现在得到的输出格式

<ArrayList>
 <item></item>
 <item></item>
 <item></item>
</ArrayList>

所需的O / P

<ArrayList>
     <user></user>
     <user></user>
     <user></user>
</ArrayList>

1 个答案:

答案 0 :(得分:0)

对于重新映射元素,请使用@JacksonXmlProperty,然后对于包装整个列表,请使用@JacksonXmlElementWrapper

通过@JacksonXmlProperty映射列表元素:

@JacksonXmlProperty(localName = "user")
List<String> userList = new ArrayList<>();

会产生:

...
<user>...</user>
<user>...</user>
<user>...</user>
...

通过@JacksonXmlElementWrapper包装列表:

@JacksonXmlProperty(localName = "user")
@JacksonXmlElementWrapper(localName = "ArrayList")
List<String> userList = new ArrayList<>();

会产生:

...
<ArrayList>
  <user>...</user>
  <user>...</user>
  <user>...</user>
</ArrayList>
...