Die Jackson-Bibliothek stellt eine herausragende Ressource für die Verarbeitung von JSON-Daten in Java-Anwendungen dar. Insbesondere bietet sie eine Vielzahl von Annotationsmöglichkeiten, um den Serialisierungs- und Deserialisierungsprozess von Java-Objekten in JSON zu beeinflussen. Dieser Artikel gibt einen tiefen Einblick in die verschiedenen Jackson-Annotations.
Einleitung zu Jackson und JSON
JSON (JavaScript Object Notation) hat sich als leichtgewichtiges Datenaustauschformat etabliert, das sowohl von Menschen einfach gelesen als auch von Maschinen effizient verarbeitet werden kann. Jackson, als eine leistungsstarke Java-Bibliothek, ermöglicht die nahtlose Umwandlung von Java-Objekten in JSON und umgekehrt. Neben der hohen Performance bietet Jackson eine breite Palette von Annotations, die Entwicklern die feingranulare Steuerung des Serialisierungs- und Deserialisierungsprozesses ermöglichen.
@JsonAutoDetect
Die @JsonAutoDetect
-Annotation ermöglicht die Kontrolle darüber, welche Felder oder Methoden während der Serialisierung und Deserialisierung sichtbar sind. Die Standardeinstellung sieht vor, dass alle öffentlichen Felder und Methoden sichtbar sind. Mithilfe von @JsonAutoDetect
können Entwickler diese Konfiguration anpassen.
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
public class MyClass {
private String privateField;
public String publicField;
// getters and setters
}
Code-Sprache: PHP (php)
In diesem Beispiel werden durch die Verwendung von @JsonAutoDetect
auch private Felder sichtbar gemacht.
@JsonProperty
Die @JsonProperty
-Annotation ermöglicht die Festlegung des Namens eines JSON-Felds, das mit einem Java-Feld oder einer Methode verknüpft ist.
public class Person {
@JsonProperty("fullName")
private String name;
// getter and setter
}
Code-Sprache: PHP (php)
Hier wird das Java-Feld name
im generierten JSON als fullName
repräsentiert.
@JsonIgnore
Die @JsonIgnore
-Annotation dient dazu, Felder oder Methoden zu markieren, die bei der Serialisierung und Deserialisierung ignoriert werden sollen.
public class Employee {
private String name;
@JsonIgnore
private String password;
// getters and setters
}
Code-Sprache: PHP (php)
In diesem Beispiel wird das Feld password
während der JSON-Verarbeitung ignoriert.
@JsonFormat
Die @JsonFormat
-Annotation ermöglicht die Kontrolle über das Format von Datum und Zeit während der Serialisierung und Deserialisierung.
public class Event {
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy hh:mm:ss")
private Date eventDate;
// getter and setter
}
Code-Sprache: PHP (php)
Hier wird das Datumsformat für das Feld eventDate
auf „dd-MM-yyyy hh:mm:ss“ festgelegt.
@JsonInclude
Die @JsonInclude
-Annotation wird verwendet, um zu steuern, welche Felder bei der Serialisierung in das JSON-Dokument einbezogen werden sollen und welche nicht.
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Person {
private String name;
private Integer age;
// getters and setters
}
Code-Sprache: PHP (php)
In diesem Beispiel werden nur nicht-null-Felder in das JSON-Dokument aufgenommen.
@JsonGetter und @JsonSetter
Die @JsonGetter
– und @JsonSetter
-Annotationen ermöglichen die Definition individueller Methoden für das Abrufen und Setzen von Werten während der Serialisierung und Deserialisierung.
public class Person {
private String fullName;
@JsonGetter("name")
public String getFullName() {
return fullName;
}
@JsonSetter("name")
public void setFullName(String fullName) {
this.fullName = fullName;
}
}
Code-Sprache: JavaScript (javascript)
Durch die Verwendung dieser Annotations können benutzerdefinierte Methoden für das Abrufen und Setzen des Namens festgelegt werden.
@JsonAlias
Die @JsonAlias
-Annotation ermöglicht die Definition alternativer Namen für ein Feld, um Rückwärtskompatibilität sicherzustellen.
public class User {
@JsonAlias({"username", "user_name"})
private String name;
// getter and setter
}
Code-Sprache: PHP (php)
Hier wird das Feld name
durch die Aliase username
und user_name
repräsentiert.
@JsonAnyGetter
Die @JsonAnyGetter
-Annotation wird verwendet, um eine Map darzustellen, die zusätzliche Eigenschaften enthält und während der Serialisierung in das JSON-Dokument einfließt.
public class CustomObject {
private Map<String, String> additionalProperties = new HashMap<>();
@JsonAnyGetter
public Map<String, String> getAdditionalProperties() {
return additionalProperties;
}
}
Code-Sprache: JavaScript (javascript)
In diesem Beispiel können zusätzliche Eigenschaften dynamisch zur Map hinzugefügt werden und werden dann in das JSON-Dokument aufgenommen.
@JsonPropertyOrder
Die @JsonPropertyOrder
-Annotation ermöglicht die Festlegung der Reihenfolge der Felder im generierten JSON-Dokument.
@JsonPropertyOrder({"name", "age", "address"})
public class Person {
private String name;
private int age;
private String address;
// getters and setters
}
Code-Sprache: PHP (php)
Hier wird die Reihenfolge der Felder im JSON-Dokument durch die @JsonPropertyOrder
-Annotation spezifiziert.
@JsonRawValue
Die @JsonRawValue
-Annotation wird verwendet, um anzugeben, dass ein String-Feld im JSON-Dokument als roher JSON-Text behandelt werden soll.
public class RawValueExample {
@JsonRawValue
private String rawJson;
// getter and setter
}
Code-Sprache: PHP (php)
Durch die Verwendung von @JsonRawValue
wird der Inhalt des Felds rawJson
als Roh-JSON-Text behandelt und nicht weiter verarbeitet.
Fazit
Die Jackson-Annotations bieten eine umfangreiche Palette von Möglichkeiten zur präzisen Steuerung der Serialisierung und Deserialisierung von Java-Objekten in JSON. Die hier vorgestellten Annotations ermöglichen Entwicklern, den JSON-Verarbeitungsprozess noch präziser an ihre Anforderungen anzupassen. Eine detaillierte Kenntnis dieser Annotationsmöglichkeiten ist entscheidend, um die Flexibilität und Leistungsfähigkeit der Jackson-Bibliothek voll auszuschöpfen und optimale Ergebnisse bei der Verarbeitung von JSON-Daten in Java-Anwendungen zu erzielen.