У меня есть коллекция Mon go с объектами этого формата:
{
id: 1,
date: "2020-08-06T12:00:00Z",
...
}
У меня есть код Java, который нужно читать из этой коллекции, но никогда не записывает в нее. Процесс, выполняющий запись в эту коллекцию, не принадлежит мне, поэтому я не могу обязательно изменить формат этой строки даты. Сначала я попытался смоделировать свой объект Java Morphia следующим образом:
@Entity public class MyDocument {
@Id
private Integer id;
private Date date;
...
}
Это не сработало, потому что Morphia не знала, как десериализовать этот формат даты в объект Date. Решение, которое я придумал, заключалось в том, чтобы обрабатывать дату как строку в POJO, а затем использовать метод getDate (), который выполняет фактическую десериализацию. Мне интересно, есть ли лучший способ сделать это? Я знаю, что если вы используете Jackson, вы можете аннотировать определенные поля с помощью @JsonDeserialize
и передать десериализатор, поэтому мне было интересно, было ли что-то подобное для Morphia.
Мое решение (которое мне кажется неоптимальным):
@Entity public class MyDocument {
@Id
private Integer id;
private String date;
...
private Date getDate() {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
try {
return dateFormat.parse(date);
} catch (Exception ex) {
return null;
}
}
}