È 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:

< 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"> importa < /span> java.util.Calendar;
import java.util.Date;

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

Questa regola segnala gli elementi java.util.Date e java.util.Calendar nell'oggetto DataObject dell'oggetto. Per questa regola, verrà fornita una correzione automatica per aggiungere l'annotazione @JsonbDateFormat(value = JsonbDateFormat.TIME_IN_MILLIS ) a questi campi per convertire l'output in epoca milliseconds.After La correzione automatizzata viene applicata la classe DataObject sarà aggiornata come segue:

< span class="Code"> < span class= "JavaKeyword"> importa < /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;
}

Nota: per accedere alla schermata @javax.json.bind.annotation.JsonbDateFormat sarà aggiunto dalla correzione automatica, La correzione automatica aggiungerà la funzione jsonb al proprio file di configurazione Liberty server.xml al file di configurazione. 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.