I have following DTOs:
@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
is a Lombok annotation which generates a constructor. Which means that this class doesn't have a no-arg constructor.
I used Spring Boot 1.4.3.RELEASE and ObjectMapper
bean was able to deserialize such object from JSON.
After the upgrade to Spring Boot 2.0.0.M7 I receive following exception:
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)
Jackson version used in Spring Boot 1.4.3 is 2.8.10
and for Spring Boot 2.0.0.M7 is 2.9.2
.
I've tried to Google this problem but found only solutions with @JsonCreator
or @JsonProperty
.
So, why does it work with Spring Boot 1.4.3 and fails with Spring Boot 2? Is it possible to configure bean to behave the same way as the older version?
@Value
annotation? – solomkinmv@JsonCreator
or@JsonProperty
, well that is the answer. Jackson requires those annotations on a constructor to know how to map the values into it or it needs adefault no-args constructor
just as the error message clearly states, and you have neither, that is why it is not working. – user177800