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.