当前位置: 首页 > 知识库问答 >
问题:

jackson for enum中的自定义xml反序列化器

王昆
2023-03-14

我有一个lib枚举,如下所示:

enum class VatRate {
    none,
    tax10,
    tax20
}

我不能修改这个枚举。我需要从xml反序列化Vat费率,如下所示:

<testXml>
  <vat>vat10</vat>
</testXml>

我知道如何创建和使用混搭与杰克逊。但是如何告诉杰克逊使用外部函数进行反序列化呢?

共有1个答案

卢景澄
2023-03-14

如果您只想自己动手:

fun stringToVat(value: String): VatId { return VatId.valueOf(value) }

更简单的方法是定义预期的DTO并让jackson进行解组:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "testXml")
data class TestXml(
    @field:XmlElement(required = true)
    var vat: VatRate? = null
)

编辑:您可以注册自己的自定义枚举序列化程序/反序列化程序。这有帮助吗?

 类似资料:
  • I'va是一个OID接口,可以由许多具体类型实现: 现在我有一个具有两个字段的对象,一个使用抽象接口类型(OID)定义,另一个使用具体类型(MyOID)定义 我想使用jackson以不同的方式序列化/反序列化字段,无论它们是使用抽象接口类型还是具体类型定义的: 注意,被序列化,包括类型信息(多态序列化),而被序列化为文本 为此,我将OID接口注释为: 并为每个具体类型分配了类型id: 最后,对容器

  • 我想反序列化表单中的类: 其中文本是加密的,反序列化应该在重建TestFieldEncryptedMessage实例之前取消对值的加密。 我采用的方法非常类似于:https://github.com/codesqueak/jackson-json-crypto 也就是说,我正在构建一个扩展SimpleModule的模块: 如您所见,设置了两个修饰符:EncryptedSerializerModif

  • 我有一个JestClient(elasticsearch)响应,我试图将其反序列化为一个对象。该对象包含两个DateTime字段,而在响应中,它们是字符串,因此我得到: 所以,我创建了一个自定义反序列化器来解决这个问题…然而,无论我做什么,我总是得到同样的错误。不知何故它没有注册使用它? 最后,我试图解析JestClient响应的代码: 无论我尝试什么,我总是得到上面的错误,我甚至不确定在这一点上

  • 看起来像Spring webflow客户端的json配置示例: 与这个问题相同,但适用于jaxb xml序列化。有JAXB和xml的解码器实现吗?是否可以使用HttpMessageConverter作为webclient的解码器,以使Spring boot控制器和客户端实现一致?

  • 我正在尝试为泛型列表创建一个自定义反序列化器。假设我得到了类B的json表示: 其中A是我仅在运行时看到的其他类。我想创建一个反序列化程序,该程序能够将listObject的类型推断为具有内部类型a的list,并将其反序列化,而不是使用默认的hashmap反序列化程序。 我尝试使用上下文反序列化器,类似于这里建议的,然后将其添加为List的自定义反序列化器 但是我不确定我应该如何读取json并在反

  • 我正在构建一个简单的项目与Spring boot和sping-kafka,我不能配置它,使其工作,它是一个简单的应用程序,生成笔记(作者,内容,createddatetime,lastmodefieddatetime)和发送基于笔记的事件,当他们被创建。 我已经玩了两天了,但我想我还没学会。 这是我的配置,我很确定它有很多锅炉板,但我已经用了几个例子来使我的工作。 我有2个生产者和消费者工厂,因为