A dátum-, időpont- é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]
java.time.Instant { "epochSecond":726213720, "nano":0 } 1993-02-05T06:02:00Z
java.time.LocalDate { "year":1993, "month":"FEBRUARY", "dayOfMonth":5, ... } 1993-02-05

Ez a szabály azokat a JAX-RS erőforrás-módszereket jelöli meg, amelyek a következő típusú JSON típusú adatokat állítanak elő vagy fogyasztanak:

A korábban felsorolt típusok bármelyikét előállító vagy felhasználó módszereket konvertálni kell. Ne feledje, hogy az ezen típusok bármelyikét tartalmazó objektumot előállító vagy felhasználó módszerekkel is foglalkozni kell.

A bináris kereső csak azokat a módszereket ismeri fel, amelyek a korábban említett típusokat közvetlenül használják vagy állítják elő. Ha azonban a módszer ezeket a típusokat tartalmazó objektumot használ fel vagy állít elő, akkor a bináris kereső nem fogja felismerni a típus használatát. Ha a bináris keresőt használja, akkor tekintse át az összes olyan @javax.ws.rs.Produces és @javax.ws.rs.Consumes annotációt, amely JSON kódot vagy helyettesítő karaktereket ad meg és győződjön meg róla, hogy minden olyan módszer, amely a megfelelő típusok bármelyikét tartalmazó objektumokat állít elő vagy használ fel, konvertálásra kerül.

A következőkben egy JAX-RS erőforrásra látható példa, amelyet a szabály meg fog jelölni:

@Path("/")
@ApplicationScoped
nyilvános osztály MyService {

    @GET
    @Path("/get")
    @Produces(MediaType.APPLICATION_JSON) nyilvános Dátum getDate() {
        //...
    }

    @GET
    @Path("/set")
    @Consumes(MediaType.APPLICATION_JSON) nyilvános void setDate(Dátum dátum) {
        //...
    }

A közvetlenül java.util.Date vagy java.util.Calendar típust visszaadó JAX-RS erőforrás-módszerek esetén a visszatérési típust módosítani kell long típusra, hogy a kimenet ugyanaz legyen, mint a Jackson esetén. Például ha egy módszer az alább látható Date objektumot adja vissza:

    @GET
    @Path("/get")
    @Produces(MediaType.APPLICATION_JSON) nyilvános Dátum getDate() {
        return new Date(...);
    }

A módszer a következőre módosítható:

    @GET
    @Path("/get")
    @Produces(MediaType.APPLICATION_JSON) nyilvános hosszú getDate() {
        return new Date(...).getTime();
    }

A java.time.LocalDate és java.time.Instant típusok esetén egyszerűbb a dátumot fogyasztó kódot módosítani, hogy az kezelje a JSON-B/Yasson formátumot.

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.