#java #rest
#java #rest
Вопрос:
Я использую javaee-api 6.0.
У меня есть компонент сущности с java.util.Поле даты называется обновленным.
public class Tariff implements Serializable {
private Date updated
И у меня есть служба REST.
@GET
@Path("/example")
public Response getTariff() {
return Response.status(200).entity(new Records(createExampleTariff())).build();
}
Когда я вызываю свою службу REST, она возвращает дату в виде числа.
{"records":{"description":"OTHER","message":"Nothing to say","status":"OK", "updated":1475822878961},"status":"ok"}
Кто-нибудь знает, как я могу справиться с этим, не используя DTO.
Комментарии:
1. дата всегда сохраняется как количество миллисекунд с 1 января 1970 года, 00:00:00 по Гринвичу, представленное этим объектом Date .
2. Привет, jp, тебе действительно нужно возвращать дату в удобочитаемой форме? С длинными датами легче работать.
Ответ №1:
Причина:
The date is always stored as the number of milliseconds since January 1, 1970, 00:00:00 GMT represented by this Date object.
Решение:
Вы можете преобразовать формат даты с помощью org.codehaus.jackson.map.JsonSerializer
. написав класс JsonDateSerializer с этой логикой преобразования.
@JsonSerialize(using=JsonDateSerializer.class)
public Date getDate() {
return date;
}
вы можете получить подробное объяснение здесь
Комментарии:
1. Сейчас чтение работает нормально, но когда я пытаюсь опубликовать и обновить, оно сообщает мне: невозможно создать экземпляр java.util. Дата из строкового значения ‘2016-10-07 09:16:51’: недопустимое представление (ошибка: не удается разобрать дату «2016-10-07 09:16:51»: несовместима ни с одной из стандартных форм («гггг-ММ-дд’Т’Ч: мм: ss.SSSZ», «гггг-MM-dd’T’HH: mm: ss.SSS’Z'», «ЭЭЭ, дд ММ гггг ЧЧ: мм: ss zzz», «гггг-ММ-дд»))
2. При преобразовании вы можете написать логику для создания даты в любом из запрошенных форматов. например, «гггг-ММ-дд’Т’Ч: мм: ss.SSSZ», «гггг-ММ-дд’Т’Ч: мм: ss.SSS’Z», «ЭЭЭ, дд ММ ГГГГ ЧЧ: мм: ss zzz», «гггг-ММ-дд»
3. в JsonDateSerializer вместо использования формата даты «ММ-дд-гггг» используйте любой из указанных
4. Я переключился на один из запрошенных форматов, и теперь все работает нормально
Ответ №2:
Класс Date фактически является оболочкой для числа, число представляет собой указанное количество миллисекунд с момента стандартного базового времени, известного как «эпоха», а именно 1 января 1970 года, 00:00:00 по Гринвичу. Вам нужно указать, что вы подразумеваете под «работой над этим». Вы отправляете либо число, либо строку. Для строки вы можете использовать SimpleDateFormat для создания нужной строки.
Ответ №3:
Я бы все равно пошел с повторным вводом метки времени, чтобы она оставалась простой. Если вам действительно нужно отправить дату в удобочитаемом формате, вы можете создать класс, который расширяет org.codehaus.jackson.map.JsonSerializer и реализует метод сериализации по своему усмотрению. Затем укажите средство получения даты следующим образом
@JsonSerialize(using=JsonDateSerializer.class)
public Date getDate() {
return date;
}
Проверьте эту статью для получения дополнительной информации