给定一个.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