Powiązanie JSON dla typów daty i kalendarza musi zostać przekształcone

W usługach JAX-RS 2.1 wewnętrzna biblioteka używana do przekształcania do i z postaci szeregowej między obiektami JSON i Java została zmieniona z Jackson na Yasson. Yasson jest implementacją odwołania JSON-B. Biblioteki Jackson i Yasson przekształcą obiekty związane z czasem na różne sposoby, na przykład:

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

Może dotyczyć dowolnych metod zasobów JAX-RS, które generują i pobierają dane typu JSON. Ta reguła oznacza flagą wszystkie pola java.util.Date lub java.util.Calendar zawarte w obiekcie generowanym lub pobieranym przez metodę zasobu JAX-RS.

Poniżej znajduje się przykład metod zasobów JAX-RS, które generują i pobierają obiekt Java zawierający pole java.util.Date i 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;
}

Reguła spowoduje oznaczenie flagą pól java.util.Date oraz java.util.Calendar w obiekcie DataObject. W skanerze kodu źródłowego dostępna jest szybka poprawka dla tej reguły. Szybka poprawka dodaje do pól adnotację @JsonbDateFormat(value = JsonbDateFormat.TIME_IN_MILLIS), która przekształca dane wyjściowe w milisekundy epoki. Po uruchomieniu szybkiej poprawki klasa DataObject zostanie zmieniona na:

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

Uwaga: aby uzyskać dostęp do adnotacji @javax.json.bind.annotation.JsonbDateFormat dodanej przez szybką poprawkę, należy dodać składnik jsonb do pliku konfiguracyjnego server.xml produktu Liberty. Należy na przykład dodać składnik jsonb-1.0 w przypadku korzystania ze składnika jaxrs-2.1.

Aby uzyskać więcej szczegółów na temat różnic w zachowaniu między specyfikacjami Jackson a Yasson, należy zapoznać się z informacjami na stronie Czy już czas na standard powiązań JSON? Artykuł porównujący zachowanie Jackson i JSON-B.