Fröhliches Mappen

Frisch aus dem Inkubator: JSON Processing mit Apache Johnzon

Melanie Feldmann

© Shutterstock / Mathisa

Apache Johnzon hat mit Version 1.0.0 den Inkubator der Apache Foundation verlassen. Das Projekt bietet eine Implementierung für JSON Processing (JSR 353). Mit dabei sind auch Erweiterungen für die Spezifikation wie einen Object Mapper, JAX-RS Provider und ein WebSocket-Modul, das eine Basisintegration des Java WebSocket API liefert (JSR 356).

Das Mapper-Modul von Johnzon erlaubt es Entwicklern die Implementierung ihrer Wahl für JSON Processing (JSR 353) zu nutzen, um JSON zu Objekt und zurück zu mappen. Der Mapper nutzt eine direkte Java-zu-JSON-Repräsentation. Zum Beispiel wird ein Java-Bean

public class MyModel {
  private int id;
  private String name;
  
  // getters/setters
}

gemappt zu

{
  "id": 1234,
  "name": "Johnzon doc"
}

Johnzon unterstützt außerdem verschiedene Anpassungen entweder direkt auf dem MapperBuilder oder durch Annotationen. Zwei Beispiele für Annotationen: Mit @JohnzonIgnore ignoriert man ein Feld. So lassen sich bestimmte Versionen eines Mappers übergehen. @JohnzonProperty erlaubt es, den Namen des JSON Java-freundlicher zu machen.

JAX-RS: MediaType mischen

Das JAX-RS-Modul kommt mit zwei Providern. org.apache.johnzon.jaxrs.[Wildcard]JohnzonProvider nutzt den Johnzon Mapper, um Objekte zu JSON zu mappen und umgekehrt. Der org.apache.johnzon.jaxrs.[Wildcard]ConfigurableJohnzonProvider macht das gleiche, aber mit Settern, um die Konfiguration des Providers in Servern und Containern zu vereinfachen. Mit org.apache.johnzon.jaxrs.[Wildcard]JsrProvider können Entwickler JsrArray und JsrObject nutzen (oder JsonStructure). Die Wildcard Provider machen im Grunde das gleiche wie die anderen Provider. Aber anstatt application/json unterstützen sie /json, /+json, /x-json, /javascript und /x-javascript. Das macht es einfacher, JSON mit anderen MediaType in der gleichen Ressource zu vermischen.

WebSocket-Integration auf Codec-Level

Das WebSocket-Modul bietet eine Basisintegration für das Java WebSocket API (JSR 356). Die Integration findet auf Codec-Level statt (Encoder/Decoder). Es gibt zwei Arten von Codecs: einer basiert auf JSON-P (JsonObject, JsonArray, JsonStructure) und einer auf dem Johnzon Mapper. Das Feature befindet sich momentan noch in der Betaphase.

Für die Zukunft ist es geplant, Johnzon für Java EE zu zertifizieren. Außerdem soll mit Johnzon 2 eine DSL kommen, die eine mutable und navigierbare JSON Structure haben wird. Auch ein Fluent API soll mit dabei sein.

Geschrieben von
Melanie Feldmann
Melanie Feldmann
Melanie Feldmann ist seit 2015 Redakteurin beim Java Magazin und JAXenter. Sie hat Technikjournalismus an der Hochschule Bonn-Rhein-Sieg studiert. Ihre Themenschwerpunkte sind IoT und Industrie 4.0.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.