A dátum- és naptártípusok JSON kötését át kell alakítani

A JAX-RS 2.1 megvalósításban a belső függvénytár kerül felhasználásra a Jackson helyett Yassont használó JSON és Java objektumok közötti sorosításra és visszafejtésre. A Yasson a JSON-B referencia megvalósítása. A Jackson és a Yasson különbözőképpen fogja sorosítani az idővel kapcsolatos objektumokat, például:

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]

Bármely JAX-RS erőforrás-módszer, amely JSON típusú adatokat állít elő vagy fogyaszt, érintett lehet. Ez a szabály megjelöli a java.util.Date vagy java.util.Calendar mezőket, amelyek egy JAX-RS erőforrás-módszer által előállított vagy fogyasztott objektumban vannak.

A következő példa egy JAX-RS erőforrás-módszert mutat be, amely egy java.util.Date és java.util.Calendar mezőt tartalmazó Java objektumot állít elő és fogyaszt:

@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 szabály meg fogja jelöli a java.util.Date és java.util.Calendar mezőket a DataObject objektumban. A forráselemzőben elérhető egy gyorsjavítás ehhez a szabályhoz. A gyorsjavítás hozzáad egy @JsonbDateFormat(value = JsonbDateFormat.TIME_IN_MILLIS) annotációt a mezőkhöz, ami átalakítja a kimenetet a korszak kezdete óta eltelt ezredmásodpercekre. A gyorsjavítás futtatása után a DataObject osztály a következőre változik:

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

Megjegyzés: A gyorsjavítás által hozzáadott @javax.json.bind.annotation.JsonbDateFormat annotáció eléréséhez hozzá kell adnia a jsonb szolgáltatást a Liberty server.xml konfigurációs fájlhoz. Például adja hozzá a jsonb-1.0 szolgáltatást, ha a jaxrs-2.1 szolgáltatást használja.

A Jackson és a Yasson viselkedés közötti különbségekkel kapcsolatos további részleteket a Jackson és JSON-B viselkedést összehasonlító Itt az ideje a JSON összerendelési szabvány használatának? című cikkben talál.