龙目岛没有创建默认构造函数导致杰克逊数据绑定失败[重复]
Posted
技术标签:
【中文标题】龙目岛没有创建默认构造函数导致杰克逊数据绑定失败[重复]【英文标题】:Lombok not creating default constructor causing jackson-databinding to fail [duplicate] 【发布时间】:2019-03-29 15:59:23 【问题描述】:我有一个 POJO
@Data
@AllArgsConstrcutor
class Test
T field1,
T field2,
当我尝试使用 jackson-databind 2.9.3 反序列化它时,它是
com.fasterxml.jackson.databind.exc.InvalidDefinitionException 失败: 无法构造
com.mypackage.Test
的实例(没有创作者,比如 默认构造,存在):无法从 Object 值反序列化(无 基于委托或基于属性的创建者)在 [来源:(字符串)
【问题讨论】:
你必须在类的顶部使用 @NoArgsConstructor 注释。 在我将 lombok 升级到 1.16.22 之前,这一切正常 @Sakalya,尝试使用 lombok 最新版本 1.18.2,如果 1.16.22 中存在错误,应该可以正常工作。此外,它是向后兼容的,所以不用担心。 【参考方案1】:@AllArgsConstructor
为类的每个字段创建一个带有参数的构造函数(因此,在您的情况下,您将获得 Test(T, T)
)。
对于默认构造函数,您应该添加@NoArgsConstructor
注解:
@Data
@AllArgsConstrcutor // Won't be used by Jackson, but there's no harm in it, per-se
@NoArgsConstructor // Here!
class Test
T field1;
T field2;
【讨论】:
在我将 lombok 升级到 1.16.22 之前,这一切正常【参考方案2】:当然Lombok
不会生成默认构造函数。
使用:@AllArgsConstrcutor
你说你希望它生成一个包含所有提供参数的构造函数。
因为它自己的 POJO 只需要一个构造函数,那就是它。
如果要生成默认构造函数,请添加:@NoArgsConstructor
【讨论】:
在我将 lombok 升级到 1.16.22 之前,这一切正常 @Sakalya 不,它没有。看到您拼写错误的“AllArgsConstructor”,您的代码甚至无法编译,更不用说运行和生成它不应该的构造函数了。这也不是该 Java 文件中阻止编译的唯一问题。 只是打字错误以上是关于龙目岛没有创建默认构造函数导致杰克逊数据绑定失败[重复]的主要内容,如果未能解决你的问题,请参考以下文章