2014-05-08 3 views
0

J'utilise Morphia (ver 0.99) pour mon mapping JSON vers Pojo vers mon MongoDB (ver 2.0). La transmission de données entre les clients Web et mon serveur fonctionne correctement. Mais maintenant j'ai un cas d'utilisation où je ne sais pas quel modèle est le plus approprié. Puis-je utiliser le pilote Morphia ou MongoDB Java pour répondre à mes besoins ou dois-je utiliser la notation Jackson et JPA 2.2?De-serialize Tableau d'objets à JSON dans MongoDB

Voici mon cas d'utilisation;

  1. Invoke Morphia requête sur collection sélectionnée (MongoDB)
  2. L'utilisation du ArrayList résultant de POJO pour la logique métier et la présentation (Primefaces)
  3. convertir également à tableau JSON de l'ArrayList résultant de Pojo d'objets, mais supprimer des propriétés Pojo dans les conversions qui ne sont pas nécessaires dans le client Web
  4. Poussez le converti JSON au client Web pour la présentation

Convertir un Pojo est simple avec Morphia, mais comment convertir un tableau?

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

Y at-il une notation comme @JsonIgnore dans Morphia d'ignorer les conversions vers et à partir JSON?

Comment puis-je le plus efficacement (sans utiliser plus de bibliothèques si possible) pour résoudre l'étape trois dans mon cas d'utilisation. Convertir ArrayList à JSON et ignorer la conversion de certaines des propriétés Pojo?

Répondre

0

J'ai trouvé une solution à mon problème. Ce n'est peut-être pas le plus élégant mais ça marche comme je veux et je n'ai pas besoin d'inclure d'autres librairies (comme Gson et Jackson) pour désérialiser ma liste de Pojo en Json, je n'ai utilisé que des classes du driver MongoDB Java et l'API Morphia. J'ai également ajouté une liste de paramètres simple pour enlever la valeur de propriété inutile à transmettre au client.

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; 
}