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

升级到Spring Boot 2后,没有默认构造函数,ObjectMapper无法反序列化

云和同
2023-03-14
问题内容

我有以下DTO:

@Value
public class PracticeResults {
    @NotNull
    Map<Long, Boolean> wordAnswers;
}

@Value
html" target="_blank">public class ProfileMetaDto {

    @NotEmpty
    String name;
    @Email
    String email;
    @Size(min = 5)
    String password;
}

@Value是生成构造函数的Lombok批注。这意味着该类没有no-arg构造函数。

我使用了Spring Boot 1.4.3.RELEASE,ObjectMapperbean能够从JSON反序列化此类对象。

升级到Spring Boot 2.0.0.M7之后,我收到以下异常:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of PracticeResults (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)

Spring Boot 1.4.3中使用的Jackson版本是2.8.10,而Spring Boot
2.0.0.M7中使用的是Jackson版本2.9.2

我尝试使用Google解决此问题,但仅找到带有@JsonCreator或的解决方案@JsonProperty

那么,为什么它不能在Spring Boot 1.4.3上运行而在Spring Boot 2上运行呢?是否可以将bean配置为与旧版本相同?


问题答案:

由于Lombok版本1.16.20中的重大更改,您需要在lombok.config文件中设置以下属性(如果没有此文件,则可以在项目根目录中创建它):

lombok.anyConstructor.addConstructorProperties=true

在Lombok更改日志中对此进行了描述:https :
//projectlombok.org/changelog。

之后,@ Value应该再次被Jackson接受。

您可能会在这里关注相关的GitHub问题,尽管它是关于@Data:https
:
//github.com/rzwitserloot/lombok/issues/1563



 类似资料:
  • 我使用了Spring Boot 1.4.3。release和bean能够从JSON反序列化这样的对象。 升级到Spring Boot 2.0.0.M7后,我收到以下异常: 那么,为什么它在Spring Boot1.4.3中工作,而在Spring Boot2中失败呢?是否可以将bean配置为与旧版本相同的行为方式?

  • 问题内容: 我想使用com.fasterxml.jackson.databind.ObjectMapper序列化和反序列化不可变对象。 不可变类如下所示(只有3个内部属性,获取器和构造函数): 但是,当我运行此单元测试时: 我得到这个例外: 这个异常要求我创建一个默认的构造函数,但这是一个不可变的对象,所以我不想拥有它。它将如何设置内部属性?这会完全混淆API的用户。 所以我的问题是: 我可以在没

  • 活体->动物->NPC->人->孩子 Live、Animal和NPC不实现Serializable。我不能改变这三门课。Person和Child确实实现了Serializable。人和生活也是抽象的类。我可以很好地序列化一个人(他是一个孩子)并发送它,但是当我尝试反序列化一个人(他是一个孩子)时,我在Child上得到一个InvalidClassException(无效构造函数),表示“no val

  • 问题内容: 默认构造函数到底是什么?你能告诉我以下哪个是默认构造函数,它与其他构造函数有何不同? 问题答案: 他们都不是。如果定义,则不是默认值。 除非你定义另一个构造函数,否则默认构造函数是自动生成的无参数构造函数。任何未初始化的字段都将设置为其默认值。对于你的榜样,它看起来像这样假设的类型String,int以及int,那类本身是公共的: 这与 完全没有构造函数。但是,如果定义至少一个构造函数

  • 问题内容: 我正在尝试使用Jackson来向Json读/写我的POJO。截至目前,我已经为我的班级进行了配置和工作,但第3方班级除外。尝试读取Json时出现错误: 在Google进行几次快速搜索后,看来我的课程需要默认的构造函数或使用注释覆盖默认的构造函数。不幸的是,失败的类来自第3方库,该类没有默认的构造函数,我显然不能覆盖代码。 所以我的问题是,对此我能做些什么吗?还是我不走运? 谢谢。 问题

  • 问题内容: 我正在尝试为学生的作业构建一个自动测试框架(基于jUnit,但这并不重要)。他们将不得不为某些类创建构造函数,并为其添加一些方法。稍后,使用我提供的测试功能,他们将检查是否正常。 我想做的是 通过反思 创建一个我想测试的类的新实例。问题在于,有时 没有默认构造函数 。我不在乎, 我想创建一个实例并自己初始化实例变量 。有什么办法吗?很抱歉,如果以前已经有人问过这个问题,但我找不到任何答