xml - 序列化 XML 嵌套在自动生成的 Java 类中
问题描述
给定一个.xsd
文件,我的策略是使用 Maven 工具从中生成 Java 类,然后使用 Jackson 序列化数据。
我在用着:
org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:0.13.3
生成 Java 类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
推荐阅读
- xamarin.forms - xamarin 表单中的多级列表视图
- r - `data` 必须是一个数据框,或其他可通过 `fortify()` 强制执行的对象,而不是具有 Ranger 类的 S3 对象
- c++ - 如何使用数组解决这个问题?
- coq - 函数参数可以在 Coq 中自动限定范围吗?
- memory-leaks - 将 QString 作为结构的成员是否有效(不是 QObject 派生类)
- sql - 比较 4 个表中的数据时匹配和合并
- c++ - 我应该如何在模板类中存储一些不同的类对象?
- sql-server - 如何防止 SQL 连接出现重复?
- c# - 为什么在某些计算机上安装应用程序时在 2 个日期之间搜索不起作用?
- java - Solr 7.7.2 - FileNotFoundException - ContentStreamBase$FileStream.getStream - 带有重音字符的路径