У меня возникли проблемы с (не)сортировкой объектов java.util.Date в метки времени. В идеале метки времени должны быть в формате UTC-0, а не в локальном часовом поясе сервера. Хотя я могу легко обойти это, если мне нужно.
NB: я знаю, что есть несколько похожих тем о переполнении стека, но все, с которыми я сталкивался, либо устарели (в отношении используемого API), либо связаны с сериализацией объектов Date в строки.
Вот выдержка из моего файла POM:
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.15</version>
</dependency>
Пример класса модели:
public class PersonJSON {
private Date birthDate;
}
Ожидаемый результат (при условии, что дата рождения 01 февраля 2015 г., 00:00:00 UTC-0):
{"birthDate":1422748800000}
Текущий выход:
{"birthDate":"2015-02-01"}
Можно ли это исправить (в идеале с помощью аннотации)?
Решение
Как оказалось, ошибка была вызвана неявным преобразованием из Java.sql.Date в Java.util.Date. Преобразование не вызывает исключений, а sql.Date расширяет util.Date, поэтому логически это должно работать, но это не так. Решение состояло в том, чтобы извлечь метку времени из Java.sql.Date и использовать ее в качестве входных данных для конструктора Java.util.Date.
Если вы хотите изменить формат, подходы, перечисленные peeskillet, верны, если у вас есть действительный объект Java.util.Date.