ObjectMapper kann nicht deserialisiert werden, ohne Standard-Konstruktor nach dem upgrade auf Spring Boot 2
Habe ich folgende 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 ist ein Lombok-Annotationen generiert ein Konstruktor. Was bedeutet, dass diese Klasse nicht mit einem no-arg-Konstruktor.
Ich verwendet, Spring Boot 1.4.3.RELEASE und ObjectMapper bean war in der Lage zu Deserialisieren solche json-Objekt aus.
Nach dem upgrade auf Spring Boot 2.0.0.M7 erhalte ich folgende 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 verwendet, die im Frühjahr Starten 1.4.3 ist 2.8.10
und für die Spring-Boot-2.0.0.M7 ist 2.9.2
.
Habe ich versucht Google dieses problem, fand aber nur Lösungen mit @JsonCreator
oder @JsonProperty
.
So, warum funktioniert es mit Spring Boot 1.4.3 und schlägt mit Spring Boot 2? Ist es möglich zu konfigurieren bean auf die gleiche Weise Verhalten wie die ältere version?
Ich habe versucht neuere version aber nichts geändert. Ich habe verschiedene DTOs mit ein paar Saiten, die auch nicht zu Deserialisieren. Ich denke, dass es irgendwie mit der Spring-Konfiguration der Objekt-mapper, aber ich konnte nicht finden, alles, was mit default-Konstruktoren.
Welche version von Lombok verwenden Sie in jedem Fall?
wow!!! Ich habe versucht, neue lombok version für spring boot 1.4.3 und bekam die gleiche Ausnahme. Bedeutet es, dass lombok 1.16.12 generiert no-arg-Konstruktor mit
@Value
annotation?ich habe versucht Google dieses problem, fand aber nur Lösungen mit
@JsonCreator
oder @JsonProperty
, das ist die Antwort. Jackson erfordert diese Anmerkungen auf einen Konstruktor, um zu wissen, wie die Zuordnung der Werte in die es, oder es muss ein default no-args constructor
so wie die Fehlermeldung besagt eindeutig, und Sie haben weder, das ist, warum es nicht funktioniert.InformationsquelleAutor solomkinmv | 2018-01-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Durch aktuelle änderungen in der Lombok-version 1.16.20 müssen Sie die folgende Eigenschaft in Ihrem
lombok.config
- Datei (wenn Sie nicht über diese Datei, die Sie erstellen können, die es in deinem Projekt root):Dies ist beschrieben in der Lombok changelog: https://projectlombok.org/changelog.
Nach, dass der @Wert, der angenommen werden sollte, wieder von Jackson.
Können Sie interessiert sein in der folgenden Sie den zugehörigen GitHub-Problem hier: https://github.com/rzwitserloot/lombok/issues/1563
InformationsquelleAutor Tobias
Eine weitere Möglichkeit, dieses problem zu lösen. Verwenden Jackson die Namen der parameter Modul, die im Frühjahr boot 2 standardmäßig. Nach Jackson kann Deserialisieren von Objekten. Aber es funktioniert nur, wenn Sie mehr als 1 Objekt im Objekt. Im Fall der einzigen Eigenschaft, die ich erhalten folgende Fehlermeldung:
Aufgrund der folgenden:
In diesem Fall behandeln mit Lombok ich habe folgenden workaround:
InformationsquelleAutor solomkinmv
Habe ich aktualisiert lombok version : 'org.projectlombok:lombok:1.18.0' und es funktionierte für mich.
InformationsquelleAutor fascynacja