Необходимо преобразовать привязку 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]
java.time.Instant { "epochSecond":726213720, "nano":0 } 1993-02-05T06:02:00Z
java.time.LocalDate { "year":1993, "month":"FEBRUARY", "dayOfMonth":5, ... } 1993-02-05

Это правило помечает методы ресурсов JAX-RS, которые предоставляют или используют данные следующих типов JSON:

Методы, которые создают или используют указанные выше типы, необходимо преобразовать. Обратите внимание, что дополнительно потребуется преобразовать методы, которые создают или используют объекты, содержащие любые из этих типов.

Сканер двоичного кода обнаруживает только методы, которые напрямую создают или используют указанные выше типы. Однако, если метод создает или использует объект, содержащий эти типы, то сканер двоичного кода не сможет обнаружить использование типов. В случае применения сканера двоичного кода проверьте все аннотации @javax.ws.rs.Produces и @javax.ws.rs.Consumes, в которых указаны объекты JSON или символы подстановки, и преобразуйте методы, которые создают или используют объекты, содержащие любые из применимых типов.

Ниже приведен пример методов ресурсов JAX-RS, которые будут помечены этим правилом:

@Path("/")
@ApplicationScoped
public class MyService {

    @GET
    @Path("/get")
    @Produces(MediaType.APPLICATION_JSON)
    public Date getDate() {
        //...
    }

    @GET
    @Path("/set")
    @Consumes(MediaType.APPLICATION_JSON)
    public void setDate(дата даты) {
        //...
    }
}

В тех методах ресурсов JAX-RS, которые напрямую возвращают значение типа java.util.Date или java.util.Calendar, тип возвращаемого значения необходимо изменить на long, чтобы вывод был таким же, как в Jackson. Например, если метод возвращает объект Date, как указано ниже:

    @GET
    @Path("/get")
    @Produces(MediaType.APPLICATION_JSON)
    public Date getDate() {
        return new Date(...);
    }

The method can be changed to the following:

    @GET
    @Path("/get")
    @Produces(MediaType.APPLICATION_JSON)
    public long getDate() {
        return new Date(...).getTime();
    }

В случае типов java.time.LocalDate и java.time.Instant проще изменить код так, чтобы он мог использовать дату в формате JSON-B/Yasson.

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