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

Jackson因“无法构造WorkpoolId的实例(尽管至少存在一个创建者):没有int/int参数构造函数/工厂”而失败

曾云
2023-03-14

我有以下课

public class WorkpoolId implements Serializable {

    @NotNull
    private Long id = null;

    @JsonCreator
    public WorkpoolId(@JsonProperty("workpoolId") long id) {
        this.id = Long.valueOf(id);
    }

    public WorkpoolId(Long id) {
        this.id = id;
    }

    public WorkpoolId(String id) {
        this.id = Long.valueOf(id);
    }

    private WorkpoolId() {
    }
}

映射时

“workpoolId”:1

到这个班我得到一个

javax.ws.rs.ProcessingException:com.fasterxml.jackson.databind.exc.MismatchedInputException:无法构造WorkpoolId的实例(尽管至少存在一个Creator):没有int/Int-参数构造函数/工厂方法从数字值反序列化(1)

为什么jackson不能对数值使用长构造函数?

共有1个答案

蒲功
2023-03-14

它失败是因为您的工作池ID无法访问字段WorkpoolId,它不在其上下文anuymore中。当JSON被反序列化时,可以将其反序列化为

  • 独立对象(没有字段workpoolId,它是workbookId)
  • 对象中的字段对象值,该对象包含可能被命名为workpoolId的数据

现在,在构建其字段workpoolId时,workbookId的使用可用于Data中的JsonCreator。

为了稍微澄清这一点,下面是一个可能的数据类示例:

@Getter @Setter
public class Data {
    private WorkpoolId workpoolId;
    @JsonCreator // here it is a property!
    public Data(@JsonProperty("workpoolId") long id) {
        this.workpoolId = new WorkpoolId(id);
    } 
}

Json类似于{code>{“workpoolId”:1}

要使其工作,只需从属性声明中删除注释。实际上,不需要整个JsonCreator注释。

 类似资料: