În JAX-RS 2.1, biblioteca internă folosită pentru serializare şi deserializare între obiecte JSON şi Java a fost schimbată de la Jackson la Yasson. Yasson este implementarea de referinţă pentru JSON-B. Jackson şi Yasson vor serializa obiectele legate de timp în moduri diferite, de exemplu:
| 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] |
Toate metodele resursei JAX-RS care produc sau folosesc date de tip JSON pot fi afectate. Această regulă semnalează toate câmpurile java.util.Date sau java.util.Calendar care sunt conţinute într-un obiect produs sau folosit de o metodă de
resursă JAX-RS.
Următorul este un exemplu de metodă de resursă JAX-RS care produce şi foloseşte un Java Object care conţine un câmp 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; } |
Regula va semnala câmpurile java.util.Date şi java.util.Calendar în obiectul DataObject. În scanerul de sursă, este disponibilă o corecţie rapidă pentru această regulă. Corecţia rapidă adaugă
un @JsonbDateFormat(value = JsonbDateFormat.TIME_IN_MILLIS) la câmpurile care convertesc ieşirea la milisecunde epoch. După ce a rulat corecţia rapidă, clasa DataObject se va modifica la:
|
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; } |
Notă: Pentru a accesa adnotarea @javax.json.bind.annotation.JsonbDateFormat
de către corecţia rapidă, va trebui să adăugaţi caracteristica jsonb la fişierul dumneavoastră de configuraţie
Liberty server.xml. De exemplu, adăugaţi caracteristica jsonb-1.0 dacă folosiţi
caracteristica jaxrs-2.1.
Pentru mai multe detalii despre diferenţele de comportament dintre Jackson şi Yasson, vedeţi articolul Is it time for a JSON binding standard? care compară comportamentul Jackson şi JSON-B.