{"id":162,"date":"2024-01-11T23:56:39","date_gmt":"2024-01-11T22:56:39","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=162"},"modified":"2024-01-24T00:17:41","modified_gmt":"2024-01-23T23:17:41","slug":"uebersicht-ueber-jackson-annotations-zur-serialisierung-von-java-objekten-in-json","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=162","title":{"rendered":"\u00dcbersicht \u00fcber Jackson-Annotations zur Serialisierung von Java-Objekten in JSON"},"content":{"rendered":"\n<p>Die Jackson-Bibliothek stellt eine herausragende Ressource f\u00fcr die Verarbeitung von JSON-Daten in Java-Anwendungen dar. Insbesondere bietet sie eine Vielzahl von Annotationsm\u00f6glichkeiten, um den Serialisierungs- und Deserialisierungsprozess von Java-Objekten in JSON zu beeinflussen. Dieser Artikel gibt einen tiefen Einblick in die verschiedenen Jackson-Annotations.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Einleitung zu Jackson und JSON<\/h2>\n\n\n\n<p>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\u00f6glicht 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\u00f6glichen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">@JsonAutoDetect<\/h2>\n\n\n\n<p>Die <code>@JsonAutoDetect<\/code>-Annotation erm\u00f6glicht die Kontrolle dar\u00fcber, welche Felder oder Methoden w\u00e4hrend der Serialisierung und Deserialisierung sichtbar sind. Die Standardeinstellung sieht vor, dass alle \u00f6ffentlichen Felder und Methoden sichtbar sind. Mithilfe von <code>@JsonAutoDetect<\/code> k\u00f6nnen Entwickler diese Konfiguration anpassen.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">MyClass<\/span> <\/span>{\n    <span class=\"hljs-keyword\">private<\/span> String privateField;\n    <span class=\"hljs-keyword\">public<\/span> String publicField;\n    <span class=\"hljs-comment\">\/\/ getters and setters<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel werden durch die Verwendung von <code>@JsonAutoDetect<\/code> auch private Felder sichtbar gemacht.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">@JsonProperty<\/h2>\n\n\n\n<p>Die <code>@JsonProperty<\/code>-Annotation erm\u00f6glicht die Festlegung des Namens eines JSON-Felds, das mit einem Java-Feld oder einer Methode verkn\u00fcpft ist.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Person<\/span> <\/span>{\n    @JsonProperty(<span class=\"hljs-string\">\"fullName\"<\/span>)\n    <span class=\"hljs-keyword\">private<\/span> String name;\n    <span class=\"hljs-comment\">\/\/ getter and setter<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Hier wird das Java-Feld <code>name<\/code> im generierten JSON als <code>fullName<\/code> repr\u00e4sentiert.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">@JsonIgnore<\/h2>\n\n\n\n<p>Die <code>@JsonIgnore<\/code>-Annotation dient dazu, Felder oder Methoden zu markieren, die bei der Serialisierung und Deserialisierung ignoriert werden sollen.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Employee<\/span> <\/span>{\n    <span class=\"hljs-keyword\">private<\/span> String name;\n    @JsonIgnore\n    <span class=\"hljs-keyword\">private<\/span> String password;\n    <span class=\"hljs-comment\">\/\/ getters and setters<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel wird das Feld <code>password<\/code> w\u00e4hrend der JSON-Verarbeitung ignoriert.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">@JsonFormat<\/h2>\n\n\n\n<p>Die <code>@JsonFormat<\/code>-Annotation erm\u00f6glicht die Kontrolle \u00fcber das Format von Datum und Zeit w\u00e4hrend der Serialisierung und Deserialisierung.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Event<\/span> <\/span>{\n    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = <span class=\"hljs-string\">\"dd-MM-yyyy hh:mm:ss\"<\/span>)\n    <span class=\"hljs-keyword\">private<\/span> Date eventDate;\n    <span class=\"hljs-comment\">\/\/ getter and setter<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Hier wird das Datumsformat f\u00fcr das Feld <code>eventDate<\/code> auf &#8222;dd-MM-yyyy hh:mm:ss&#8220; festgelegt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">@JsonInclude<\/h2>\n\n\n\n<p>Die <code>@JsonInclude<\/code>-Annotation wird verwendet, um zu steuern, welche Felder bei der Serialisierung in das JSON-Dokument einbezogen werden sollen und welche nicht.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">@JsonInclude(JsonInclude.<span class=\"hljs-keyword\">Include<\/span>.NON_NULL)\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Person<\/span> <\/span>{\n    <span class=\"hljs-keyword\">private<\/span> String name;\n    <span class=\"hljs-keyword\">private<\/span> Integer age;\n    <span class=\"hljs-comment\">\/\/ getters and setters<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel werden nur nicht-null-Felder in das JSON-Dokument aufgenommen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">@JsonGetter und @JsonSetter<\/h2>\n\n\n\n<p>Die <code>@JsonGetter<\/code>&#8211; und <code>@JsonSetter<\/code>-Annotationen erm\u00f6glichen die Definition individueller Methoden f\u00fcr das Abrufen und Setzen von Werten w\u00e4hrend der Serialisierung und Deserialisierung.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">public <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Person<\/span> <\/span>{\n    private <span class=\"hljs-built_in\">String<\/span> fullName;\n\n    @JsonGetter(<span class=\"hljs-string\">\"name\"<\/span>)\n    public <span class=\"hljs-built_in\">String<\/span> getFullName() {\n        <span class=\"hljs-keyword\">return<\/span> fullName;\n    }\n\n    @JsonSetter(<span class=\"hljs-string\">\"name\"<\/span>)\n    public <span class=\"hljs-keyword\">void<\/span> setFullName(<span class=\"hljs-built_in\">String<\/span> fullName) {\n        <span class=\"hljs-keyword\">this<\/span>.fullName = fullName;\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Durch die Verwendung dieser Annotations k\u00f6nnen benutzerdefinierte Methoden f\u00fcr das Abrufen und Setzen des Namens festgelegt werden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">@JsonAlias<\/h2>\n\n\n\n<p>Die <code>@JsonAlias<\/code>-Annotation erm\u00f6glicht die Definition alternativer Namen f\u00fcr ein Feld, um R\u00fcckw\u00e4rtskompatibilit\u00e4t sicherzustellen.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">User<\/span> <\/span>{\n    @JsonAlias({<span class=\"hljs-string\">\"username\"<\/span>, <span class=\"hljs-string\">\"user_name\"<\/span>})\n    <span class=\"hljs-keyword\">private<\/span> String name;\n    <span class=\"hljs-comment\">\/\/ getter and setter<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Hier wird das Feld <code>name<\/code> durch die Aliase <code>username<\/code> und <code>user_name<\/code> repr\u00e4sentiert.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">@JsonAnyGetter<\/h2>\n\n\n\n<p>Die <code>@JsonAnyGetter<\/code>-Annotation wird verwendet, um eine Map darzustellen, die zus\u00e4tzliche Eigenschaften enth\u00e4lt und w\u00e4hrend der Serialisierung in das JSON-Dokument einflie\u00dft.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">public <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">CustomObject<\/span> <\/span>{\n    private <span class=\"hljs-built_in\">Map<\/span>&lt;<span class=\"hljs-built_in\">String<\/span>, <span class=\"hljs-built_in\">String<\/span>&gt; additionalProperties = <span class=\"hljs-keyword\">new<\/span> HashMap&lt;&gt;();\n\n    @JsonAnyGetter\n    public <span class=\"hljs-built_in\">Map<\/span>&lt;<span class=\"hljs-built_in\">String<\/span>, <span class=\"hljs-built_in\">String<\/span>&gt; getAdditionalProperties() {\n        <span class=\"hljs-keyword\">return<\/span> additionalProperties;\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel k\u00f6nnen zus\u00e4tzliche Eigenschaften dynamisch zur Map hinzugef\u00fcgt werden und werden dann in das JSON-Dokument aufgenommen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">@JsonPropertyOrder<\/h2>\n\n\n\n<p>Die <code>@JsonPropertyOrder<\/code>-Annotation erm\u00f6glicht die Festlegung der Reihenfolge der Felder im generierten JSON-Dokument.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">@JsonPropertyOrder({<span class=\"hljs-string\">\"name\"<\/span>, <span class=\"hljs-string\">\"age\"<\/span>, <span class=\"hljs-string\">\"address\"<\/span>})\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Person<\/span> <\/span>{\n    <span class=\"hljs-keyword\">private<\/span> String name;\n    <span class=\"hljs-keyword\">private<\/span> int age;\n    <span class=\"hljs-keyword\">private<\/span> String address;\n    <span class=\"hljs-comment\">\/\/ getters and setters<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Hier wird die Reihenfolge der Felder im JSON-Dokument durch die <code>@JsonPropertyOrder<\/code>-Annotation spezifiziert.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">@JsonRawValue<\/h2>\n\n\n\n<p>Die <code>@JsonRawValue<\/code>-Annotation wird verwendet, um anzugeben, dass ein String-Feld im JSON-Dokument als roher JSON-Text behandelt werden soll.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">RawValueExample<\/span> <\/span>{\n    @JsonRawValue\n    <span class=\"hljs-keyword\">private<\/span> String rawJson;\n    <span class=\"hljs-comment\">\/\/ getter and setter<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Durch die Verwendung von <code>@JsonRawValue<\/code> wird der Inhalt des Felds <code>rawJson<\/code> als Roh-JSON-Text behandelt und nicht weiter verarbeitet.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p>Die Jackson-Annotations bieten eine umfangreiche Palette von M\u00f6glichkeiten zur pr\u00e4zisen Steuerung der Serialisierung und Deserialisierung von Java-Objekten in JSON. Die hier vorgestellten Annotations erm\u00f6glichen Entwicklern, den JSON-Verarbeitungsprozess noch pr\u00e4ziser an ihre Anforderungen anzupassen. Eine detaillierte Kenntnis dieser Annotationsm\u00f6glichkeiten ist entscheidend, um die Flexibilit\u00e4t und Leistungsf\u00e4higkeit der Jackson-Bibliothek voll auszusch\u00f6pfen und optimale Ergebnisse bei der Verarbeitung von JSON-Daten in Java-Anwendungen zu erzielen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Jackson-Bibliothek stellt eine herausragende Ressource f\u00fcr die Verarbeitung von JSON-Daten in Java-Anwendungen dar. Insbesondere bietet sie eine Vielzahl von Annotationsm\u00f6glichkeiten, 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 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-162","post","type-post","status-publish","format-standard","hentry","category-plain_java"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/162","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=162"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/162\/revisions"}],"predecessor-version":[{"id":163,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/162\/revisions\/163"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=162"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=162"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=162"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}