Convertir les chaînes à des objets Java automatiquement
-
29-09-2019 - |
Question
Je veux convertir l'entrée d'utilisateur qui se présente comme Map<String, String[]>
aux objets Java. Plus spéciquement Je veux convertir les params d'un HttpServletRequest aux champs d'un objet de domaine arbitraire.
Je voudrais avoir quelque chose comme ceci:
Domain d = Converter.convert(params, new Domain());
S'il y a plus d'un élément dans le tableau de chaînes, qui est la valeur d'une entrée de la carte, il doit être converti en une liste ou un tableau. Peut-être que les paramètres régionaux devrait être pris en considération pour la date et la conversion des devises. Et une liste des erreurs de conversion serait bien.
Y at-il une bibliothèque avec un tel convertisseur?
Peut-on parler « convertisseur »? Je pense qu'il est souvent appelé « liaison de données », mais qui est le mauvais terme dans mon opionion, car elle est liée à des valeurs de modèle de liaison aux éléments GUI, ce qui est une chose un peu différent - est pas
La solution
Si votre cadre ne supporte pas cette fonctionnalité un coup d'oeil sur
http://commons.apache.org/beanutils/ , espeically le paquet BeanUtils qui a cours avec des objectifs similaires (peut-être exactement les mêmes) que vous voulez.
Vous pouvez également envisager de passer à un cadre plus mature; -)
Autres conseils
Ne pas utiliser ce code simple car il est seulement un exemple. Vous devez ajouter un peu à peu la gestion des exceptions et une boucle à travers une carte. Mais en général l'idée est comme ceci:
void putValue(String name, String value, Object object) throws Exception {
String setterName = "set"+name.substring(0,1).toUpperCase()+name.substring(1);
Method m = object.getClass().getMethod(setterName, String.class);
if (m!=null) {
m.invoke(object, value);
}
}
Ce code, donné un nom de paramètre 'name' va essayer de trouver une méthode setName(String name)
et appeler à la valeur donnée.