小编典典

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

spring-boot

我有以下DTO:

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

@Value
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配置为与旧版本相同?


阅读 650

收藏
2020-05-30

共1个答案

小编典典

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

lombok.anyConstructor.addConstructorProperties=true

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

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

您可能有兴趣关注相关的GitHub问题,尽管它是关于@Datahttps
:
//github.com/rzwitserloot/lombok/issues/1563

2020-05-30