当前位置: 首页 > 面试题库 >

有什么方法可以为嵌套在Jackson的Optional中的类型指定自定义反序列化器?

慕容齐智
2023-03-14
问题内容

我有一些类型需要使用它们自己的特殊反序列化器和序列化器来处理,但是当类型嵌套在Optional中时,如何指示Jackson使用它们呢?

我正在使用JDK8Module,它适用于不需要任何特殊处理的任何类型。当将@JsonDeserialize和@JsonSerialize批注用于Optional字段时,似乎没有任何方法可应用于Optional内的值:

 @JsonDeserialize(?????)
 Optional<SpecialType> myField

问题答案:

实现此目的的正确方法是:

 @JsonDeserialize(contentUsing=CustomDeserializer.class)
 Optional<SpecialType> myField

有一个阻止此工作的缺陷已在2.7.4中修复。



 类似资料:
  • 想象一下以下场景: 我想为Foo编写一个自定义的Jackson反序列化程序。为了做到这一点(例如,为了反序列化具有Foo的类 如何编写这样的反序列化程序?这应该是可能的,因为Jackson是通过键入集合和地图来实现的。 澄清: 似乎有两个部分可以解决这个问题: 1)获取内声明的属性类型并使用它来反序列化

  • 我正在尝试使用Jakson反序列化一个嵌套的多态类型。也就是说,我的顶级类型引用了另一个多态类型,该类型最终由不抽象的类扩展。这不起作用,它会抛出一个异常。 下面是我尝试做的一个简化的例子。 我得到了关于抽象类型的标准异常。 让我解释一下我的用例。我有一个描述数据工作流的Json文档。我在“Level One”有一个抽象类型,描述对单个值的操作。我派生了一堆不是抽象的类,它们实现了公共操作(我用@

  • 我正在编写一个使用Jackson序列化/反序列化对象的类。在编译时,我不知道要序列化/反序列化的对象是哪种类型。 我的类看起来像(移除了一些不相关的代码): 这是我用来测试的代码片段: 据我所知,使用应该足以让反序列化器知道从字节流读取的值应该放在对象中。但是,方法返回的对象仍然是,我理解它是反序列化的默认类。 我还尝试更改方法以返回,但我遇到了同样的问题。 我很确定这是关于我将类型传递到序列化器

  • 我需要对一个长而复杂的json进行反序列化,为此我编写了一组java类来映射数据,并且我必须为许多不同类型的字段(包括String、Boolean、BigDecimal等)编写自定义反序列化器。 我知道我可以用相应的自定义反序列化器注释java类中的所有字段(如下所示),但是我需要注释所有类中的几乎所有字段。 或者可以通过某种方式为类实现自定义反序列化,该类定义如何根据每个字段的数据类型反序列化每

  • 有什么方法可以防止一个字段在Jackson中反序列化吗?但是我需要序列化我用@JsonIgnoreProperties尝试字段,这阻止了序列化和反序列化。

  • 嗨下面这个问题 如何在Jackson中为泛型类型创建自定义反序列化器? 我想知道如何通过这个来解析 这就是我目前所拥有的 当我试图反序列化一点这个的时候,我得到了一个NPE