Jackson 因“无法构造 WorkpoolId 的实例(尽管至少存在一个 Creator)而失败:没有 int/Int-argument 构造函数/工厂”
Posted
技术标签:
【中文标题】Jackson 因“无法构造 WorkpoolId 的实例(尽管至少存在一个 Creator)而失败:没有 int/Int-argument 构造函数/工厂”【英文标题】:Jackson fails with "Cannot construct instance of WorkpoolId (although at least one Creator exists): no int/Int-argument constructor/factory" 【发布时间】:2021-01-30 01:10:49 【问题描述】:我有以下课程
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-argument 构造函数/工厂方法从数值 (1) 反序列化
为什么杰克逊不能使用长构造函数来获取数值?
【问题讨论】:
【参考方案1】:它失败是因为您的WorkpoolId
无权访问字段workpoolId
它不在其上下文中。当您的 JSON 被反序列化时,它可以被反序列化为
workpoolId
,它ISworkbookId
)
对象中的字段对象值包含 -say Data
- 它 可能被命名为 workpoolId。
现在Data
中的JsonCreator 在构造其字段workpoolId 时可以使用workbookId。
为了澄清这一点,这里是一个可能的 Data
类的示例:
@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 就像"workpoolId":1
要让它工作,只需从属性声明中删除注释@JsonProperty("workpoolId")
。实际上不需要整个@JsonCreator
注释。
【讨论】:
以上是关于Jackson 因“无法构造 WorkpoolId 的实例(尽管至少存在一个 Creator)而失败:没有 int/Int-argument 构造函数/工厂”的主要内容,如果未能解决你的问题,请参考以下文章