【问题标题】:Renaming classes Jackson XML serialization in Kotlin?在 Kotlin 中重命名 Jackson XML 序列化类?
【发布时间】:2021-01-06 05:03:44
【问题描述】:

我发现了很酷的 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 是一个数据类

data class CustomIntegration(val name: String)

对于 输入 CustomeIntegration("Integration A")输出 将是

<CustomIntegration>
    <name>
        Integrartion A
    </name>
</CustomIntegration>

问题是在反序列化为 XML 时如何将 CustomIntegration 更改为 integration?我想解决许多用例:

  • 任何类的单一实现,所以CoolIntegrationAwesomeIntegration都将转换为标签integration
  • 我不能只是将类 CustomIntegration 重命名为 integration,因为它几乎就像 SOAP:envelope 到 SOAP 集成中一样,所以在同一个标​​签中可以有不同的内容
  • 理想情况下,我想编写尽可能少的代码,以简化它的维护

到目前为止,我发现的唯一解决方案是编写自定义反序列化程序,但这并不能完全解决我试图满足的所有非功能性需求。

【问题讨论】:

    标签: kotlin deserialization xml-deserialization jackson-dataformat-xml


    【解决方案1】:

    我在another SO post找到的解决方案。

    为了改变XML中的根元素名称,需要打上@JsonRootName(value = "integration")注解。

    @JsonRootName(value = "integration")
    data class CustomIntegration(val name: String)
    

    输出将是:

    <integration>
        <name>
            Integrartion A
        </name>
    </integration>
    

    【讨论】:

      猜你喜欢
      • 2019-10-12
      • 1970-01-01
      • 1970-01-01
      • 2013-05-02
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      • 2018-07-18
      相关资源
      最近更新 更多