Десериализовать массив объектов в JSON в MongoDB

Я использую Morphia (версия 0.99) для сопоставления JSON с Pojo с моей MongoDB (версия 2.0). Потоковая передача данных между веб-клиентами и моим сервером работает нормально. Но теперь у меня есть вариант использования, когда я не знаю, какой шаблон наиболее подходит. Могу ли я использовать Java-драйвер Morphia или MongoDB для выполнения своих требований или мне нужно использовать нотацию Jackson и JPA 2.2.

Вот мой вариант использования;

  1. Вызов запроса Morphia для выбранной коллекции (MongoDB)
  2. Использование полученного ArrayList Pojos для бизнес-логики и представления (Primefaces)
  3. Также преобразуйте полученный ArrayList объектов Pojo в массив объектов JSON, но удалите свойства Pojo в преобразованиях, которые не нужны в веб-клиенте
  4. Отправьте преобразованный JSON в веб-клиент для презентации

Преобразование одного Pojo в Morphia выполняется прямо, но как мне преобразовать массив?

return morph.toDBObject(obj).toString();

Есть ли в Morphia обозначение типа @JsonIgnore, чтобы игнорировать преобразования в JSON и из него?

Как я могу наиболее эффективно (без использования дополнительных библиотек, если это возможно) выполнить третий шаг в моем случае использования. Преобразовать ArrayList в JSON и игнорировать преобразование некоторых свойств Pojo?


person Chris    schedule 08.05.2014    source источник


Ответы (1)


Я придумал решение своей проблемы. Возможно, это не самый элегантный, но он работает так, как я хочу, и мне не нужно включать другие библиотеки (например, Gson и Jackson), чтобы десериализовать мой список массивов Pojo в Json, я использовал только классы из Java-драйвера MongoDB и API-интерфейс Morphia. Я также добавил простой список параметров, чтобы убрать ненужные значения свойств, которые будут переданы клиенту.

public static String deserializeToJSON(List<?> objList, String... removeAttributes) {
    List<DBObject> dbObjList = new ArrayList<>(objList.size());
    DBObject dbObj;
    for(Object obj :objList){
        dbObj = morph.toDBObject(obj);
        for(int i=0; i < removeAttributes.length; i++){
        debug("Removed DBObject filed: " +dbObj.removeField(removeAttributes[i]));                                    
        }
        dbObjList.add(dbObj);
    }             
    String json = JSON.serialize(dbObjList);
    return json;
}
person Chris    schedule 09.05.2014