В JAX-RS 2.1 для выполнения сериализации и десериализации между объектами JSON и Java вместо библиотеки Jackson стала применяться библиотека Yasson. Yasson является эталонной реализацией JSON-B. Jackson и Yasson по-разному выполняют сериализацию объектов времени, например:
| 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] |
Изменение касается всех методов ресурсов JAX-RS, которые предоставляют или используют данные типа JSON. Это правило отмечает все поля java.util.Date и
java.util.Calendar, содержащиеся в объекте, который предоставляется или
используется методом ресурса JAX-RS.
Ниже приведен пример методов ресурсов JAX-RS, которые предоставляют или
используют объект Java, содержащий поле java.util.Date или 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; } |
Это правило отмечает поля java.util.Date и
java.util.Calendar в объекте DataObject. Для этого правила доступно быстрое исправление в сканере исходного кода. Процедура быстрого исправления добавляет @JsonbDateFormat(value =
JsonbDateFormat.TIME_IN_MILLIS) в поля для преобразования вывода в число
миллисекунд с начала отсчета времени. После применения быстрого исправления класс DataObject будет изменен на:
|
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; } |
Примечание: для получения доступа к аннотации
@javax.json.bind.annotation.JsonbDateFormat, добавленной
процедурой быстрого исправления, потребуется добавить компонент
jsonb в файл конфигурации server.xml Liberty. Например, если используется jaxrs-2.1, то необходимо добавить компонент jsonb-1.0.
За дополнительной информацией об отличиях Jackson от Yasson обратитесь к статье Is it time for a JSON binding standard?, в которой сравниваются принципы работы Jackson и JSON-B.