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.