我有以下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构造函数。
@Value
我使用了Spring Boot 1.4.3.RELEASE,ObjectMapperbean能够从JSON反序列化此类对象。
ObjectMapper
升级到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。
2.8.10
2.9.2
我尝试使用Google解决此问题,但仅找到带有@JsonCreator或的解决方案@JsonProperty。
@JsonCreator
@JsonProperty
那么,为什么它不能在Spring Boot 1.4.3上运行而在Spring Boot 2上运行呢?是否可以将bean配置为与旧版本相同?
由于Lombok版本1.16.20中的重大更改,您需要在lombok.config文件中设置以下属性(如果没有此文件,则可以在项目根目录中创建它):
lombok.config
lombok.anyConstructor.addConstructorProperties=true
Lombok变更日志中对此进行了描述:https : //projectlombok.org/changelog。
之后,@ Value应该再次被Jackson接受。
您可能有兴趣关注相关的GitHub问题,尽管它是关于@Data:https : //github.com/rzwitserloot/lombok/issues/1563
@Data