Как сериализовать отметку времени json firestore на сегодняшний день? - PullRequest
1 голос
/ 23 февраля 2020

Я храню дату в Firestore. Я получаю HashMap<String, Object> из пожарного магазина и хочу воссоздать свой объект из него.

Перед реализацией даты рабочий код был:

HashMap<String, Object> document = new HashMap<String, Object>();
document.put("name", "name");
JSONElement jsonElement = gson.toJsonTree(document);
Event event = gson.fromJson(jsonElement , Event.class);

Теперь я добавил поле

@ServerTimestamp
private Date dateOfEvent;

Но когда я пытаюсь сериализовать его, я получаю следующую ошибку:

com.google.gson.JsonSyntaxException: java .lang.IllegalStateException: ожидаемая STRING, но была BEGIN_OBJECT по пути $ .dateOfEvent

Поскольку JsonElement "dateOfEvent" выглядит так, потому что это временная метка Firestore:

{"dateOfEvent": {"nanoseconds":0,"seconds":1584921600}, "name": "test Event"}

Спасибо за ваше время и вашу помощь.

1 Ответ

0 голосов
/ 27 февраля 2020

Gson ожидает строку типа даты, подобную 2020-02-27T09:00:00, но на самом деле это объект. Вы можете настроить свои классы следующим образом и добавить вспомогательный метод, чтобы получить dateOfEvent как Date:

class Event {
  private String name;
  private MyDate date;
}

class MyDate {
  private Long nanoseconds;
  private Long seconds;

  // getters/setters for nanoseconds, seconds...

  public Date asDate() {
    // convert to date
  }
}

...