El enlace JSON para los tipos de fecha y calendario debe convertirse

En JAX-RS 2.1, la biblioteca interna utilizada para la serialización y la deserialización entre objetos JSON y Java ha cambiado de Jackson a Yasson. Yasson es la implementación de referencia de JSON-B. Jackson y Yasson serializarán los objetos relacionados con el tiempo de distintas formas, por ejemplo:

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]

Se pueden realizar los métodos de recursos JAX-RS que producen o consumen datos de tipo JSON. Esta regla marca los campos java.util.Date o java.util.Calendar que están contenidos en un objeto producido o consumido por un método de recurso JAX-RS.

A continuación se muestra un ejemplo de los métodos de recursos JAX-RS que producen y consumen un objeto Java que contiene un campo java.util.Date y 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;
}

Esta regla marca el java.util.Date y java.util.Calendar del objeto DataObject objeto. Para esta regla, se proporcionará una corrección automatizada para añadir la anotación @JsonbDateFormat(value = JsonbDateFormat.TIME_IN_MILLIS ) a estos campos para convertir la salida a la época milliseconds.After la corrección automatizada se aplica la clase DataObject se actualizará del siguiente modo:

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

Nota: Para acceder al @javax.json.bind.annotation.JsonbDateFormat la corrección automática añadirá la función jsonb a su archivo de configuración Liberty server.xml archivo de configuración. Por ejemplo, añada la característica jsonb-1.0 si está utilizando la característica jaxrs-2.1.

Para obtener más detalles sobre las diferencias de comportamiento entre Jackson y Yasson, consulte el artículo Is it time for a JSON binding standard? que compara el comportamiento de Jackson y JSON-B.