97 votes

Comment faire pour convertir un objet Java (haricot) de paires clé-valeur (et vice versa)?

Dire que j'ai un très simple objet java qui n'a que quelques getXXX et setXXX propriétés. Cet objet est utilisé seulement pour traiter les valeurs, fondamentalement, un enregistrement ou un type-safe (et performant) de la carte. J'ai souvent besoin de convertir cet objet de paires clé-valeur (forme de chaînes ou de type sécurisé) ou de convertir à partir de paires clé-valeur à cet objet.

Autres que de réflexion ou manuellement à l'écriture de code pour faire cette conversion, quelle est la meilleure façon d'atteindre cet objectif?

Un exemple pourrait être l'envoi de cet objet plus jms, sans l'aide de la ObjectMessage type (ou la conversion d'un message entrant le bon type de l'objet).

188voto

StaxMan Points 34626

Beaucoup de solutions possibles, mais nous allons juste ajouter un de plus. Utilisation Jackson (JSON traitement lib) pour faire "json" la conversion, comme:

ObjectMapper m = new ObjectMapper();
Map<String,Object> props = m.convertValue(myBean, Map.class);
MyBean anotherBean = m.convertValue(props, MyBean.class);

(cette entrée de blog a d'autres exemples)

Vous pouvez pratiquement convertir tout types compatibles: compatible, ce qui signifie que si vous n'avez convertir de type JSON, et à partir de ce JSON à type de résultat, d'entrées match (si configuré correctement peut aussi ignorer non reconnu).

Fonctionne bien pour les cas on pourrait s'attendre, y compris des Cartes, des Listes, des tableaux, des primitives, proche du haricot Pojo.

56voto

Maurice Perry Points 18154

Il y a toujours apache commons beanutils mais bien sûr, il utilise la réflexion sous le capot

8voto

Michael Borgwardt Points 181658

La génération de Code serait le seul moyen d'autres je pense. Personnellement, j'avais obtenu avec un généralement réutilisables réflexion solution (à moins que cette partie du code est absolument la performance est critique). À l'aide de JMS sonne comme overkill (en plus de la dépendance, et c'est même pas ce que ça veut dire). En outre, il utilise probablement une réflexion aussi bien sous le capot.

8voto

DeXoN Points 21

C'est une méthode de conversion d'un objet Java à une Carte

public static Map<String, Object> ConvertObjectToMap(Object obj) throws 
    IllegalAccessException, 
    IllegalArgumentException, 
    InvocationTargetException {
        Class<?> pomclass = obj.getClass();
        pomclass = obj.getClass();
        Method[] methods = obj.getClass().getMethods();


        Map<String, Object> map = new HashMap<String, Object>();
        for (Method m : methods) {
           if (m.getName().startsWith("get") && !m.getName().startsWith("getClass")) {
              Object value = (Object) m.invoke(obj);
              map.put(m.getName().substring(3), (Object) value);
           }
        }
    return map;
}

C'est de cette façon de l'appeler

   Test test = new Test()
   Map<String, Object> map = ConvertObjectToMap(test);

3voto

mjn Points 19315

JSON, par exemple à l'aide de XStream + Larguer, est un format de texte simple avec des paires clé-valeur. Elle est soutenue par exemple par l'Apache ActiveMQ JMS courtier de message pour objet Java échange avec d'autres plates-formes / langages.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X