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:
|
@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) { //... } } |
|
import java.util.Calendar;
import java.util.Date; public class DataObject { public Date juDate; public Calendar juCalendar; } |
Die Regel markiert die java.util.Date- und java.util.Calendar-Felder im DataObject-Objekt. Im Quellenscanner ist eine Schnellkorrektur für diese Regel verfügbar.
Die Schnellkorrektur fügt den Feldern den Code
@JsonbDateFormat(value = JsonbDateFormat.TIME_IN_MILLIS) hinzu, der die Ausgabe in Epochenmillisekunden konvertieren. Nach der Ausführung der Schnellkorrektur wird die DataObject-Klasse wie folgt geändert:
|
import 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; } |
Anmerkung: Um auf die Annotation @javax.json.bind.annotation.JsonbDateFormat
zuzugreifen, die von der Schnellkorrektur hinzugefügt wird, müssen Sie das Feature jsonb in Ihrer Liberty-Konfigurationsdatei
server.xml hinzufügen. 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.