JSON-Bindung für Datums- und Kalendertypen muss konvertiert werden

In JAX-RS 2.1 wurde die für die Serialisierung und Entserialisierung von JSON- und Java-Objekten verwendete interne Bibliothek von Jackson auf Yasson umgestellt. Yasson ist die Referenzimplementierung von JSON-B. Jackson und Yasson serialisieren zeitbezogene Objekte auf verschiedene Arten, z. B.:

Jackson Yasson
java.util.Date 726213720000 1993-02-05T06:02:00Z[UTC]
java.util.Calendar 726213720000 1993-02-05T00:00:00-06:00[America/Chicago]

Es können alle JAX-RS-Ressourcenmethoden, die JSON-Daten erzeugen oder verarbeiten, betroffen sein. Diese Regel markiert alle java.util.Date- und java.util.Calendar-Felder, die in einem Objekt enthalten sind, das von einer JAX-RS-Ressourcenmethode erzeugt oder verwendet wird.

Im Folgenden sehen Sie ein Beispiel für JAX-RS-Ressourcenmethoden, die ein Java-Objekt erzeugen oder verwenden, das ein java.util.Date- oder java.util.Calendar-Feld enthält:

< span class="Code"> @Path("/")
@ApplicationScoped
public class MyService {

@GET
@Path("/get")
@Produces(MediaType.APPLICATION_JSON)
public DataObject getData() {
//...
}

@GET
@Path("/set")
@Consumes(MediaType.APPLICATION_JSON)
public void setData(DataObject data) {
//...
}
}
< span class="Code"> < span class= "JavaKeyword"> import < /span> java.util.Calendar;
import java.util.Date;

public class DataObject {
public Date juDate;
public Calendar juCalendar;
}

Diese Regel kennzeichnet die java.util.Date und java.util.Calendar felder in dem DataObject objekt. Für diese Regel wird eine automatische Korrektur bereitgestellt, um die Anmerkung @JsonbDateFormat(value = JsonbDateFormat.TIME_IN_MILLIS ) zu diesen Feldern hinzuzufügen, um die Ausgabe in die Epoche milliseconds.After zu konvertieren. Nach Anwendung der automatischen Korrektur wird die Klasse DataObject wird wie folgt aktualisiert:

< span class="Code"> < span class= "JavaKeyword"> import < /span> java.util.Calendar;
import java.util.Date;
import javax.json.bind.annotation.JsonbDateFormat;

public class DataObject {
@JsonbDateFormat(value = JsonbDateFormat.TIME_IN_MILLIS)
public Date juDate;
@JsonbDateFormat(value = JsonbDateFormat.TIME_IN_MILLIS)
public Calendar juCalendar;
}

Hinweis: Für den Zugriff auf die @javax.json.bind.annotation.JsonbDateFormat anmerkung wird durch die automatische Korrektur hinzugefügt. Die automatische Korrektur fügt die jsonb-Funktion zu Ihrer Liberty server.xml konfigurationsdatei hinzu. Fügen Sie beispielsweise das Feature jsonb-1.0 hinzu, wenn Sie das Feature jaxrs-2.1 verwenden.

Weitere Einzelheiten zu den Verhaltensunterschieden zwischen Jackson und Yasson finden Sie im Artikel Is it time for a JSON binding standard? zum Verhaltensvergleich von Jackson und JSON-B.