Diese Bohne 'State':
public class State {
private boolean isSet;
@JsonProperty("isSet")
public boolean isSet() {
return isSet;
}
@JsonProperty("isSet")
public void setSet(boolean isSet) {
this.isSet = isSet;
}
}
wird über die Leitung mit dem Ajax-Rückruf "Erfolg" gesendet:
success : function(response) {
if(response.State.isSet){
alert('success called successfully)
}
Ist hier die Anmerkung @JsonProperty erforderlich? Was ist der Vorteil der Verwendung? Ich denke, ich kann diese Anmerkung entfernen, ohne Nebenwirkungen zu verursachen.
Lesen Sie über diese Anmerkung unter https://github.com/FasterXML/jackson-annotations/wiki/Jackson-Annotations. Ich weiß nicht, wann diese verwendet werden muss.
Antworten:
Hier ist ein gutes Beispiel. Ich verwende es, um die Variable umzubenennen, da der JSON aus einer
.Net
Umgebung stammt, in der Eigenschaften mit einem Großbuchstaben beginnen.Dies analysiert korrekt den / vom JSON:
quelle
@JsonProperty
Annotation.Double
? Ich frage mich nur, ob der Typ sein mussString
oder ein Typ, den JSON unterstützt. Könnte es irgendein Typ sein? @OldCurmudgeonIch denke, OldCurmudgeon und StaxMan sind beide richtig, aber hier ist eine Satzantwort mit einem einfachen Beispiel für Sie.
@JsonProperty (Name) weist Jackson ObjectMapper an, den Namen der JSON-Eigenschaft dem Namen des mit Anmerkungen versehenen Java-Felds zuzuordnen.
quelle
Gut für das, was es jetzt wert ist ... JsonProperty wird AUCH verwendet, um Getter- und Setter-Methoden für die Variable neben der üblichen Serialisierung und Deserialisierung anzugeben. Angenommen, Sie haben eine Nutzlast wie diese:
und eine Deserializer-Klasse:
In diesem Fall ist eine JsonProperty-Annotation erforderlich. Wenn Sie jedoch auch eine Methode in der Klasse haben
Schauen Sie sich auch diese Dokumentation an: http://fasterxml.github.io/jackson-annotations/javadoc/2.3.0/com/fasterxml/jackson/annotation/JsonProperty.html
quelle
Ohne Anmerkungen würde der abgeleitete Eigenschaftsname (der mit JSON übereinstimmt) "gesetzt" und nicht - wie es beabsichtigt zu sein scheint - "isSet". Dies liegt daran, dass gemäß der Java Beans-Spezifikation die Methoden der Form "isXxx" und "setXxx" bedeuten, dass die logische Eigenschaft "xxx" verwaltet werden muss.
quelle
Wie Sie wissen, geht es hier darum, ein Objekt zu serialisieren und zu entsalzen. Angenommen, es gibt ein Objekt:
Die Serialisierung dieses Objekts lautet:
Der Name der Variablen wird direkt zum Serialisieren von Daten verwendet. Wenn Sie die System-API aus der Systemimplementierung entfernen möchten, müssen Sie in einigen Fällen die Variable bei der Serialisierung / Deserialisierung umbenennen. @JsonProperty sind Metadaten, die dem Serializer mitteilen, wie ein serielles Objekt erstellt werden soll. Es wird verwendet, um:
aus Beispiel:
quelle
Das Hinzufügen der JsonProperty gewährleistet auch die Sicherheit für den Fall, dass jemand entscheidet, einen der Eigenschaftsnamen zu ändern, ohne zu wissen, dass die betreffende Klasse in ein Json-Objekt serialisiert wird. Wenn sie den Eigenschaftsnamen ändern, stellt die JsonProperty sicher, dass er im Json-Objekt und nicht im Eigenschaftsnamen verwendet wird.
quelle
Neben anderen Antworten ist die
@JsonProperty
Annotation sehr wichtig, wenn Sie die@JsonCreator
Annotation in Klassen verwenden, die keinen Konstruktor ohne Argumente haben.In diesem Beispiel ist der einzige Konstruktor als markiert
@JsonCreator
, daher verwendet Jackson diesen Konstruktor, um die Instanz zu erstellen. Aber die Ausgabe ist wie folgt:Aber nach dem Hinzufügen der
@JsonProperty
Annotation im Konstruktor:Die Deserialisierung ist erfolgreich:
quelle
Vergessen Sie neben all den obigen Antworten nicht den Teil der Dokumentation, der besagt
Wenn Sie
non-static
in Ihrer Klasse eine Methode haben , die nicht konventionellgetter or setter
ist, können Sie siegetter and setter
mithilfe der Annotation wie eine Methode verhalten. Siehe das folgende BeispielWenn das obige Objekt serialisiert ist, enthält die Antwort
getUsername()
getId()
getIdAndUsername
*Da die Methode
getIdAndUsername
mitget
dann beginnt, wird sie als normaler Getter behandelt, weshalb Sie solche mit Anmerkungen versehen könnten@JsonIgnore
.Wenn Sie bemerkt haben,
concatenateIdAndUsername
dass der Name nicht zurückgegeben wird und der Name nicht mit beginntget
und Sie möchten, dass das Ergebnis dieser Methode in die Antwort aufgenommen wird, können Sie es verwenden@JsonProperty("...")
und es wird wiegetter/setter
in der oben hervorgehobenen Dokumentation erwähnt normal behandelt .quelle
Von JsonProperty javadoc,
quelle