序列化的 XML 是从自动生成的 Java 类嵌套的



给定一个.xsd文件,我有一个策略,使用Maven工具从中生成Java类,然后使用Jackson来序列化数据。

我正在使用:

  • 生成 Java 类org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:0.13.3
  • com.fasterxml.jackson.dataformat.xml.XmlMapper(2.9.2(,带有要序列化的new JaxbAnnotationModule()

生成的代码示例:

@XmlElement(required = true)
protected List<TLocalizedString> title;

用法示例:

TLocalizedString tls = new TLocalizedString();
tls.setValue( string );
tls.setLocale( LOCALE );
item.getTitle().add( tls );

我们得到:

<item ....>
<title>
<title locale="en_US">The Title</title>
</title>

我们的期望:

<item ....>
<title locale="en_US">The Title</title>

换句话说,XML 是嵌套出来的。

这是应该控制的事情吗:

  • 在使用点的代码中?
  • 在杰克逊序列化程序的配置中?
  • 在通过配置或生成标志的代码生成中?
  • 在通过.xsd更改生成代码时?

终于找到了答案。我看过很多使用这个配置的例子,但不知道它实际上在做什么。正是这个错误报告给了我线索,通过短语

列表的包装元素

XmlMapper xmlMapper = new XmlMapper();
xmlMapper.setDefaultUseWrapper( false ); // This prevents unnecessary nesting of XML elements

最新更新