Legarea JSON pentru tipurile de dată şi calendar trebuie să fie convertită

Î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.