È necessario convertire il bind JSON dei tipi data e calendario

In JAX-RS 2.1, la libreria interna utilizzata per la serializzazione e la deserializzazione tra gli oggetti JSON e Java è stata modificata da Jackson a Yasson. Yasson è l'implementazione di riferimento di JSON-B. Jackson e Yasson serializzeranno gli oggetti correlati al tempo in diversi modi, ad esempio:

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]

Qualsiasi metodo della risorsa JAX-RS che produce o utilizza dati di tipo JSON potrebbe essere interessato. Questa regola contrassegna qualsiasi campo java.util.Date o java.util.Calendar contenuto in un oggetto prodotto o utilizzato da un metodo della risorsa JAX-RS.

Di seguito viene riportato un esempio di metodo della risorsa JAX-RS che produce ed utilizza un oggetto Java contenente un campo java.util.Date e java.util.Calendar:

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

La regola contrassegnerà i campi java.util.Date e java.util.Calendar nell'oggetto DataObject. Nello scanner di origine, è disponibile una correzione rapida per questa regola. La correzione rapida aggiunge un valore @JsonbDateFormat (value = JsonbDateFormat.TIME_IN_MILLIS) nei campi che converte l'output in millisecondi epoch. Dopo l'esecuzione della correzione rapida, la classe DataObject verrà modificata in:

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

Nota: per accedere all'annotazione @javax.json.bind.bind.annotation.JsonbDateFormat aggiunta dalla correzione rapida, sarà necessario aggiungere la funzione jsonb al file di configurazione Liberty server.xml. Ad esempio, aggiungere la funzione jsonb-1.0 se si sta utilizzando la funzione jaxrs-2.1.

Per ulteriori dettagli sulle differenze di comportamento tra Jackson e Yasson, consultare l'articolo Is it time for a JSON binding standard? che confronta il comportamento di Jackson e JSON-B.