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:

< span class="Code"> @Path("/")
@ApplicationScoped
clasa publică MyService {

@GET
@Path("/get")
@Produces(MediaType.APPLICATION_JSON)
public DataObject getData() {
//...
}

@GET
@Path("/set")
@Consumes(MediaType.APPLICATION_JSON)
public void setData(DataObject data) {
//...
}
}
< span class="Code"> < span class= "JavaKeyword" > import < /span> java.util.Calendar;
import java.util.Date;

public class DataObject {
public Date juDate;
public Calendar juCalendar;
}

Această regulă marchează java.util.Date și java.util.Calendar în obiectul DataObject obiect. Pentru această regulă, se va furniza o corecție automată pentru a adăuga adnotarea @JsonbDateFormat(value = JsonbDateFormat.TIME_IN_MILLIS ) la aceste câmpuri pentru a converti rezultatul în epocă milliseconds.After corecția automată este aplicată, clasa DataObject va fi actualizată după cum urmează:

< span class="Code"> < span class= "JavaKeyword" > import < /span> 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 @javax.json.bind.annotation.JsonbDateFormat adnotarea va fi adăugată de soluția automată, Soluția automată va adăuga caracteristica jsonb la Liberty server.xml fișier de configurare. 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.