Необходимо преобразовать привязку JSON для типов даты и календаря

В 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:

< span class="Code"> @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) {
//...
}
}
< span class="Code"> < span class= "JavaKeyword"> import < /span> 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 ) к этим полям, чтобы преобразовать вывод в эпоху milliseconds.After После применения автоматизированного исправления класс DataObject будет обновлен следующим образом:

< 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;
}

Примечание: Чтобы получить доступ к @javax.json.bind.annotation.JsonbDateFormat аннотация будет добавлена автоматическим исправлением, Автоматическое исправление добавит функцию jsonb в ваш Liberty server.xml конфигурационный файл. Например, если используется jaxrs-2.1, то необходимо добавить компонент jsonb-1.0.

За дополнительной информацией об отличиях Jackson от Yasson обратитесь к статье Is it time for a JSON binding standard?, в которой сравниваются принципы работы Jackson и JSON-B.