2011-11-18 9 views
2

Disons que j'ai quelques JSON comme ça dans mongo:morphia traiter les données mauvaises

{"n":"5"} 

et une classe java comme ceci:

@Entity 
public class Example { 
    Integer n; 
} 

Cela fonctionne (je sais que le JSON doit stocker la valeur comme un int pas une chaîne mais je ne contrôle pas cette partie).

Maintenant, quand je contiennent des données comme celui-ci morphia lance:

{"n":""} 

Je suis à la recherche d'une solution (le comportement que je voudrais est pour une chaîne vide à traiter même que nulle).

La seule solution que j'ai à ce jour est:

public class Example { 
    String n; 

    public Integer getN() { 
     return NumberUtils.isNumber(n) ? NumberUtils.createInteger(n) : null; 
    } 
} 

Mais j'espère pour un moyen d'accrocher une annotation sur la propriété entière qui personnalise le comportement de désérialisation.

Répondre

6

J'ai donc posé cette question sur le groupe google morphia et j'ai pensé partager la réponse. L'utilisation de l'annotation de cycle de vie @PreLoad me permet de modifier le DBObject avant que les conversions en POJO aient lieu. Donc, cela devrait le faire:

@PreLoad void fixup(DBObject obj) { 
    if (StringUtils.isEmpty(obj.get("n"))) { 
     obj.put("n",null); 
    } 
} 
+0

Merci! Nouveau à la morphine et j'ai eu ce même problème. J'ai eu une date stockée comme une chaîne et quand je suis allé corriger le type de données, rien n'a été chargé. IllegalArgumentException car le format de la chaîne n'était pas correct. Je peux maintenant corriger le DbObject avant le mapping. – NewfrontSolutions

+0

Aussi, dans la version de Morphia que j'utilise j'avais besoin d'utiliser com.mongodb.BasicDBObject – NewfrontSolutions

Questions connexes