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

如何使用JsonCreator使用重载的构造函数反序列化类

匡凌
2023-03-14
问题内容

我正在尝试使用Jackson 1.9.10反序列化此类的实例

public class Person {

@JsonCreator
public Person(@JsonProperty("name") String name,
        @JsonProperty("age") int age) {
    // ... person with both name and age
}

@JsonCreator
public Person(@JsonProperty("name") String name) {
    // ... person with just a name
}
}

当我尝试这个我得到以下

冲突的基于属性的创建者:已经有… {界面org.codehaus.jackson.annotate.JsonCreator @
org.codehaus.jackson.annotate.JsonCreator()}],遇到了…,注释:{接口org.codehaus。
jackson.annotate.JsonCreator @ org.codehaus.jackson.annotate.JsonCreator()}]

有没有办法使用Jackson重载带有重载的构造函数的类?

谢谢


问题答案:

尽管没有正确记录,但是每种类型只能有一个创建者。您可以在类型中具有任意数量的构造函数,但是只有其中一个应该在其@JsonCreator上具有注释。



 类似资料:
  • 我在我的项目中使用FasterXML/Jackson Databind已经有一段时间了,一切都很顺利,直到我发现这篇文章并开始使用这种方法对没有@JsonProperty注释的对象进行序列化。 问题是,当我有一个接受多个参数并使用@JsonCreator注释装饰这个构造函数时,Jackson会抛出以下错误: 我已经创建了一个小项目来说明这个问题,我试图对这个类进行序列化: 反序列化代码如下: 我已

  • 我正在编写一个库来访问用于管理后端系统中数据的网络应用编程接口。该库还将为类提供正确管理数据的逻辑。由于这个原因,大多数类不能有属性的公共设置器或接受所有属性的公共构造函数。相反,我试图使用一个具有内部访问修饰符的构造函数,它可以设置所有属性。 当试图使用System反序列化JSON字符串时。文本。json它将忽略内部构造函数-它将使用其他构造函数或抛出异常。我还尝试用注释内部构造函数,但它什么也

  • 我有一个类,它有一个默认构造函数,还有一个重载构造函数,它接受一组参数。这些参数与对象上的字段匹配,并在构造时指定。此时,我需要用于其他目的的默认构造函数,因此如果可以的话,我希望保留它。 我的问题:如果我删除默认的构造函数并传递JSON字符串,对象反序列化正确,并传递构造函数参数没有任何问题。我最终以我所期望的方式找回填充的对象。但是,一旦我将默认构造函数添加到对象中,当我调用

  • 可以反序列化到具有私有字段和自定义参数构造函数的类,而无需使用注释,也无需使用Jackson? 我知道在Jackson中使用这种组合是可能的:1)Java 8,2)使用“-parameters”选项编译,3)参数名称与JSON匹配。但在GSON中,默认情况下也可以不受所有这些限制。 例如: 这对GSON来说很好,但Jackson提出: 这在GSON中是可能的,所以我认为Jackson中一定有某种方

  • 问题内容: 在Jackson中,当您使用注释构造函数时,必须使用注释其参数。所以这个构造函数 变成这个: 我不明白为什么有必要。你能解释一下吗? 问题答案: Jackson必须知道以什么顺序将字段从JSON对象传递给构造函数。使用反射无法在Java中访问参数名称-这就是为什么您必须在注释中重复此信息的原因。

  • 我有一堂这样的课: 其中,因此无法使用构造函数对其进行反序列化。相反,有一个可以创建一个实现实例。接口和实用程序类都在外部库中,因此我无法注释它们。 我如何告诉Jackson,当遇到时,它应该调用而不是构造函数?是否有混音配置,我可以指定从类型到构造方法的映射,或者我需要编写的自定义反序列化器?