Wenn Sie in Jackson einen Konstruktor mit @JsonCreator
Anmerkungen versehen , müssen Sie seine Argumente mit Anmerkungen versehen @JsonProperty
. Also dieser Konstruktor
public Point(double x, double y) {
this.x = x;
this.y = y;
}
wird dies:
@JsonCreator
public Point(@JsonProperty("x") double x, @JsonProperty("y") double y) {
this.x = x;
this.y = y;
}
Ich verstehe nicht, warum es notwendig ist. Kannst du bitte Erklären?
java
json
serialization
jackson
Ori Popowski
quelle
quelle
Auf Parameternamen kann der Java-Code normalerweise zur Laufzeit nicht zugreifen (da er vom Compiler gelöscht wird). Wenn Sie diese Funktionalität benötigen, müssen Sie entweder die integrierte Funktionalität von Java 8 oder eine Bibliothek wie ParaNamer verwenden, um Zugriff zu erhalten dazu.
Um bei der Verwendung von Jackson keine Anmerkungen für die Konstruktorargumente verwenden zu müssen, können Sie eines dieser beiden Jackson-Module verwenden:
Jackson-Modul-Parameternamen
Mit diesem Modul können Sie bei Verwendung von Java 8 annotationsfreie Konstruktorargumente abrufen . Um es verwenden zu können, müssen Sie zuerst das Modul registrieren:
Kompilieren Sie dann Ihren Code mit dem Flag -parameters:
Link: https://github.com/FasterXML/jackson-modules-java8/tree/master/parameter-names
Jackson-Modul-Paranamer
Bei diesem anderen müssen Sie lediglich das Modul registrieren oder eine Introspektion für Anmerkungen konfigurieren (jedoch nicht beide, wie in den Kommentaren angegeben). Sie können annotationsfreie Konstruktorargumente für Java-Versionen vor 1.8 verwenden .
Link: https://github.com/FasterXML/jackson-modules-base/tree/master/paranamer
quelle
Mit jdk8 können Konstruktoranmerkungen vermieden werden, bei denen der Compiler optional Metadaten mit den Namen der Konstruktorparameter einführt. Dann kann Jackson mit dem Jackson-Modul-Parameternamen- Modul diesen Konstruktor verwenden. Sie können ein Beispiel bei Post Jackson ohne Anmerkungen sehen
quelle
Weil Java-Bytecode nicht die Namen von Methoden- oder Konstruktorargumenten enthält.
quelle
@JsonProperty
Annotation weiterhin unterstützenMan kann einfach die Annotation java.bean.ConstructorProperties verwenden - sie ist viel weniger ausführlich und Jackson akzeptiert sie auch. Zum Beispiel :
quelle
Wenn ich das richtig verstehe , ersetzen Sie den Standardkonstruktor durch einen parametrisierten und müssen daher die JSON-Schlüssel beschreiben, mit denen der Konstruktor aufgerufen wird.
quelle
Wie in der Annotationsdokumentation angegeben , gibt die Annotation an, dass der Argumentname ohne Änderungen als Eigenschaftsname verwendet wird. Er kann jedoch als nicht leerer Wert angegeben werden, um einen anderen Namen anzugeben:
quelle
Kommen Sie einfach darauf und bekommen Sie irgendwo eine Antwort. Sie können die folgenden Anmerkungen seit 2.7.0 verwenden
quelle