A ligação do JSON para tipos de data e calendário deve ser convertida

No JAX-RS 2.1, a biblioteca interna usada para serialização e desserialização entre objetos JSON e Java foi mudada de Jackson para Yasson. Yasson é a implementação de referência de JSON-B. O Jackson e o Yasson serializarão objetos relacionados ao tempo de diferentes maneiras, por exemplo:

Jackson Yasson
java.util.Date 726213720000 1993-02-05T06:02:00Z [ UTC ]
java.util.Calendar 726213720000 1993-02-05T00:00:00-06:00 [ América/Chicago ]

Quaisquer métodos de recurso JAX-RS que produzem ou consomem dados de tipo JSON podem ser afetados. Essa regra sinaliza quaisquer campos java.util.Date ou java.util.Calendar que estão contidos em um objeto produzido ou consumido por um método de recurso JAX-RS.

A seguir está um exemplo de métodos de recurso JAX-RS que produzem e consomem um Objeto Java contendo um 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;
}

A regra sinalizará os campos java.util.Date e java.util.Calendar no objeto DataObject. No scanner de origem, há uma correção rápida disponível para essa regra. A correção rápida inclui um @JsonbDateFormat(value = JsonbDateFormat.TIME_IN_MILLIS) nos campos que converte a saída em milissegundos de época. Depois que a correção rápida for executada, a classe DataObject mudará para:

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: para acessar a anotação @javax.json.bind.annotation.JsonbDateFormat incluída pela correção rápida, você precisará incluir o recurso jsonb em seu arquivo de configuração server.xml do Liberty. Por exemplo, inclua o recurso jsonb-1.0 se você estiver usando o recurso jaxrs-2.1.

Para obter mais detalhes sobre as diferenças de comportamento entre o Jackson e o Yasson, consulte o artigo É o momento para um padrão de ligação JSON? comparando o comportamento do Jackson e do JSON-B.