我有以下 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 注释。这意味着此类没有无参数构造函数。
我使用了 Spring Boot 1.4.3.RELEASE 和 ObjectMapper
bean 能够从 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 是 2.9.2
。
我试过用谷歌搜索这个问题,但只找到了 @JsonCreator
或 @JsonProperty
的解决方案。
那么,为什么它适用于 Spring Boot 1.4.3 而无法适用于 Spring Boot 2?是否可以将 bean 配置为与旧版本的行为方式相同?
原文由 solomkinmv 发布,翻译遵循 CC BY-SA 4.0 许可协议
由于 Lombok 版本 1.16.20 中的重大更改,您需要在
lombok.config
文件中设置以下属性(如果您没有此文件,可以在项目根目录中创建它):Lombok 更新日志中对此进行了描述: https ://projectlombok.org/changelog。
之后 @Value 应该再次被 Jackson 接受。
您可能有兴趣在此处关注相关的 GitHub 问题,尽管它是关于
@Data
: https ://github.com/rzwitserloot/lombok/issues/1563