Я получил JSON, который сериализовал в MongoDB BasicDBObject и вставил в БД:
String serialized = "";
try {
serialized = OBJECT_MAPPER.writeValueAsString(customEx.getOut().getBody());
} catch (JsonProcessingException e) {
e.printStackTrace();
}
collection.update(upsertQuery, BasicDBObject.parse(serialized), true, false);
При чтении DBObject из БД я хочу преобразовать его в POJO с помощью ObjectMappers ''readValue 'с данным классом:
public static <T> T fromDB(DBObject o, Class<T> clazz) {
try {
return OBJECT_MAPPER.readValue(o.toString(), clazz);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
Класс, в который я хочу преобразовать его, генерируется из xsd sheme и также содержит временные метки / длинные значения следующим образом:
@XmlRootElement(name = "ItemType")
public class ItemType {
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar date;
[...]
Однакоэто работало нормально для более старых версий Java MongoDB.Теперь длинные значения сериализуются как BSON, выглядя так:
"date": {
"$numberLong": "1551172199214"
}
Когда я пытаюсь десериализовать это с помощью jacksons ObjectMapper, я получаю
Невозможно десериализовать экземпляр javax.xml.datatype.XMLGregorianCalendar
изТокен START_OBJECT
Причина этого мне ясна, поскольку длинное значение находится в собственном объекте стиля BSON.
До сих пор я уже пытался использовать BsonDocument, например:
public static <T> T fromDB(DBObject o, Class<T> clazz) {
try {
BsonDocument parse = BsonDocument.parse(o.toString());
return OBJECT_MAPPER.readValue(parse.toJson(), clazz);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
Но это по-прежнему не конвертирует части BSON в JSON.
Есть ли способ десериализации BSON в данный класс с использованием jacksons ObjectMapper?Или просто преобразовать его в DBObject без использования частей BSON?