Я пытаюсь иметь пользовательский формат даты в выводе Gson, но .setDateFormat(DateFormat.FULL)
, похоже, не работает, и это то же самое с .registerTypeAdapter(Date.class, new DateSerializer())
.
Как будто Gson не заботится об объекте «Date» и печатает его по-своему.
Как я могу это изменить?
Спасибо
РЕДАКТИРОВАТЬ:
@Entity
public class AdviceSheet {
public Date lastModif;
[...]
}
public void method {
Gson gson = new GsonBuilder().setDateFormat(DateFormat.LONG).create();
System.out.println(gson.toJson(adviceSheet);
}
Я всегда использую java.util.Date
; setDateFormat()
не работает :(
Ответы:
Похоже, вам нужно определить форматы для части даты и времени или использовать форматирование на основе строк. Например:
или используя java.text.DateFormat
или сделать это с помощью сериализаторов:
Я считаю, что форматеры не могут создавать временные метки, но эта пара сериализатор / десериализатор, кажется, работает
Если вы используете Java 8 или выше, вы должны использовать вышеуказанные сериализаторы / десериализаторы, например:
источник
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
работает.Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
работаетВыше формат кажется мне лучше, поскольку он имеет точность до миллис.
источник
Как указывал ML, JsonSerializer работает здесь. Однако, если вы форматируете объекты базы данных, используйте java.sql.Date для регистрации вашего сериализатора. Десериализатор не нужен.
Этот отчет об ошибке может быть связан с: http://code.google.com/p/google-gson/issues/detail?id=230 . Я использую версию 1.7.2, хотя.
источник
В случае, если вы ненавидите внутренние классы, используя функциональный интерфейс, вы можете написать меньше кода в Java 8 с лямбда-выражением.
источник
Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, (JsonDeserializer) (json, typeOfT, context) -> new Date(json.getAsLong())).create();
Это не будет работать вообще. В JSON нет типа даты. Я бы порекомендовал сериализовать в ISO8601 и обратно (для агностики форматов и JS-совместимости). Учтите, что вы должны знать, какие поля содержат даты.
источник
Вы можете указать свой формат
Gson gson = builder.setDateFormat("yyyy-MM-dd").create();
в этом методе вместо того,yyyy-MM-dd
чтобы использовать любые другие форматыисточник
Это ошибка . В настоящее время вы должны либо установить a,
timeStyle
либо использовать один из вариантов, описанных в других ответах.источник
Я на Gson 2.8.6 и обнаружил эту ошибку сегодня.
Мой подход позволяет всем нашим существующим клиентам (мобильным / веб / и т. Д.) Продолжать функционировать в том виде, в каком они были, но добавляет некоторую обработку для тех, кто использует 24-часовые форматы, и также допускает использование миллисера.
Я сохранил сериализацию так же, как все клиенты понимают стандартный формат даты JSON.
Обычно я не считаю хорошей практикой использовать блоки try / catch, но это должно быть довольно редким случаем.
источник