La liaison JSON pour les types date et calendrier doit être convertie

Dans JAX-RS 2.1, la bibliothèque interne Jackson utilisée pour la sérialisation et la désérialisation entre les objets JSON et Java a été remplacée par Yasson. Yasson est l'implémentation de référence de JSON-B. Jackson et Yasson sérialisent différemment les objets liés au temps. Par exemple :

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]

Les méthodes de ressource JAX-RS qui génèrent ou consomment des données de type JSON peuvent être affectées. Cette règle marque les zones java.util.Date ou java.util.Calendar contenues dans un objet généré ou consommé par une méthode de ressource JAX-RS.

Voici un exemple de méthodes de ressource JAX-RS qui génèrent et consomment un objet Java contenant une zone java.util.Date et une zone java.util.Calendar :

< 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;
}

Cette règle signale les java.util.Date et java.util.Calendar dans l'objet DataObject objet. Pour cette règle, un correctif automatisé sera fourni pour ajouter l'annotation @JsonbDateFormat(value = JsonbDateFormat.TIME_IN_MILLIS ) à ces champs pour convertir la sortie en époque milliseconds.After Le correctif automatisé est appliqué, la classe DataObject sera mise à jour comme suit :

< 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;
}

Note : Pour accéder à la @javax.json.bind.annotation.JsonbDateFormat sera ajoutée par le correctif automatique, le correctif automatique ajoutera la fonctionnalité jsonb à votre fichier de configuration Liberty server.xml fichier de configuration. Par exemple, ajoutez la fonction jsonb-1.0 si vous utilisez la fonction jaxrs-2.1.

Pour plus d'informations sur les différences de comportement entre Jackson et Yasson, consultez l'article Is it time for a JSON binding standard? qui compare les comportements de Jackson et JSON-B.