在 Kotlin 中重命名 类 Jackson XML 序列化?
Renaming classes Jackson XML serialization in Kotlin?
我发现很酷的 Jackson XML 图书馆:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.8.10</version>
<type>bundle</type>
</dependency>
无需额外配置即可工作:
val xmlMapper = XmlMapper()
xmlMapper.enable(SerializationFeature.INDENT_OUTPUT);
xmlMapper.writeValueAsString(CustomIntegration)
其中CustomIntegration
是一个数据class
data class CustomIntegration(val name: String)
对于输入 CustomeIntegration("Integration A")
,输出将是
<CustomIntegration>
<name>
Integrartion A
</name>
</CustomIntegration>
问题是如何在反序列化为XML时将CustomIntegration
更改为integration
?我想解决许多用例:
- 任何 class 的单一实现,因此
CoolIntegration
、AwesomeIntegration
都将转换为标记 integration
- 我不能只是将 class
CustomIntegration
重命名为 integration
因为它几乎就像 SOAP:envelope
到 SOAP 集成中,所以在同一个标签中可以有不同的内容
- 理想情况下,我希望编写尽可能少的代码,以简化它的维护
到目前为止我找到的唯一解决方案是编写自定义反序列化器,但这并不能完全解决我试图满足的所有非功能性需求。
我在another SO post.
中找到的解决方案
为了更改XML中的根元素名称,您需要添加@JsonRootName(value = "integration")
注释。
@JsonRootName(value = "integration")
data class CustomIntegration(val name: String)
输出 将是:
<integration>
<name>
Integrartion A
</name>
</integration>
我发现很酷的 Jackson XML 图书馆:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.8.10</version>
<type>bundle</type>
</dependency>
无需额外配置即可工作:
val xmlMapper = XmlMapper()
xmlMapper.enable(SerializationFeature.INDENT_OUTPUT);
xmlMapper.writeValueAsString(CustomIntegration)
其中CustomIntegration
是一个数据class
data class CustomIntegration(val name: String)
对于输入 CustomeIntegration("Integration A")
,输出将是
<CustomIntegration>
<name>
Integrartion A
</name>
</CustomIntegration>
问题是如何在反序列化为XML时将CustomIntegration
更改为integration
?我想解决许多用例:
- 任何 class 的单一实现,因此
CoolIntegration
、AwesomeIntegration
都将转换为标记integration
- 我不能只是将 class
CustomIntegration
重命名为integration
因为它几乎就像SOAP:envelope
到 SOAP 集成中,所以在同一个标签中可以有不同的内容 - 理想情况下,我希望编写尽可能少的代码,以简化它的维护
到目前为止我找到的唯一解决方案是编写自定义反序列化器,但这并不能完全解决我试图满足的所有非功能性需求。
我在another SO post.
中找到的解决方案为了更改XML中的根元素名称,您需要添加@JsonRootName(value = "integration")
注释。
@JsonRootName(value = "integration")
data class CustomIntegration(val name: String)
输出 将是:
<integration>
<name>
Integrartion A
</name>
</integration>