V rozhraní JAX-RS 2.1 se interní knihovna používaná pro serializaci a deserializaci mezi objekty JSON a objekty Java změnila z Jackson na Yasson. Yasson je implementace odkazů JSON-B. Jackson a Yasson budou serializovat objekty související s časem různými způsoby, např.:
| 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] |
Veškeré metody prostředků JAX-RS, které produkují nebo spotřebovávají data typu JSON mohou být ovlivněny. Toto pravidlo označí veškerá pole java.util.Date nebo java.util.Calendar, která jsou obsaženy v objektu vytvořeném nebo spotřebovaném metodou prostředku JAX-RS.
Dále je uveden příklad metod prostředku JAX-RS, které vytvářejí a spotřebovávají objekt Java obsahující pole java.util.Date a 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; } |
Pravidlo označí pole java.util.Date a java.util.Calendar v objektu DataObject. Ve zdrojovém skeneru je k dispozici rychlá oprava pro toto pravidlo. Rychlá oprava přidá @JsonbDateFormat(value = JsonbDateFormat.TIME_IN_MILLIS) do polí, která převádí výstup na epoch millis. Po spuštění rychlé opravy se třída DataObject změní 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; } |
Poznámka: Aby bylo možné přistupovat k anotaci @javax.json.bind.annotation.JsonbDateFormat přidané rychlou opravou, budete muset přidat funkci jsonb do konfiguračního souboru Liberty server.xml. Například přidejte funkci jsonb-1.0, používáte-li funkci jaxrs-2.1.
Další podrobnosti o rozdílech v chování mezi Jackson a Yason viz článek Je čas na standard vazby JSON? porovnávající chování Jackson a JSON-B.