Convertire le stringhe di oggetti Java automaticamente
-
29-09-2019 - |
Domanda
voglio convertire l'input dell'utente che si presenta come Map<String, String[]>
agli oggetti in Java. Più specically voglio convertire i params di un HttpServletRequest ai campi di un oggetto di dominio arbitrario.
Mi piacerebbe avere qualcosa di simile:
Domain d = Converter.convert(params, new Domain());
Se v'è più di un elemento della matrice di stringhe, che è il valore di una voce della mappa, dovrebbe essere convertito in un elenco o di una matrice. Forse il locale dovrebbe essere considerato per la data e la conversione di valuta. E un elenco di errori di conversione sarebbe bello.
C'è una biblioteca con tale convertitore A?
lo chiameresti "convertitore"? Penso che è spesso chiamato "l'associazione di dati", ma che è il termine sbagliato nel mio parere, era pulito, in quanto è legato ai valori del modello legame con elementi della GUI, che è una cosa un po 'diversa -? Non è vero
Soluzione
Se il framework web non supporta questa funzionalità dare un'occhiata al
http://commons.apache.org/beanutils/ , espeically il pacchetto beanutils che ha classi con scopi simili (forse esattamente la stessa cosa) che si desidera.
Si può anche prendere in considerazione il passaggio a un quadro più maturo; -)
Altri suggerimenti
Non utilizzare questo codice semplice in quanto è solo un esempio. Si dovrebbe aggiungere un po 'la gestione delle eccezioni carina e un ciclo attraverso una mappa. Ma in generale l'idea è in questo modo:
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);
}
}
Questo codice, dato un nome di parametro 'nome' cercherà di trovare un metodo setName(String name)
e chiamarlo con il valore dato.