2012-07-26 12 views
10

Ho una classe bean Java Person contenente 3 variabili:Come stampare Java Bean completamente utilizzando la riflessione o di qualsiasi altra utilità

  • nome (stringa)
  • età (stringa)
  • indirizzo (Object) .

Address contiene 3 variabili:

  • strada
  • door_no
  • città

Mi piacerebbe avere un programma di utilità che dovrebbe stampare tutte le variabili in Person.

Con questo voglio dire che dovrebbe stampare Person & anche l'oggetto Address contenuto in esso.

ho potuto creare un hashmap e mettere i nomi delle variabili & valori utilizzando la riflessione e la chiave di stampa/valore di interfaccia utente in JSP, ma il problema è che devo applicare riflessione per Address per aggiungere/valore della variabile nella HashMap.

C'è un programma di utilità a disposizione per fare questo?

+4

Non è quello che dovrebbe fare '#toString()' su questi oggetti? – Romain

risposta

27

Si potrebbe usare ToStringBuilder da Apache Commons.

Da documentazione:

Un'invocazione tipica per questo metodo sarebbe simile:

public String toString() { 
    return ToStringBuilder.reflectionToString(this); 
} 

Maggiori dettagli:

Questa classe consente una buona e coerente toString () da costruire per qualsiasi classe o oggetto. Questa classe mira a semplificare il processo:

consentendo nomi di campo gestire tutti i tipi di trattamento costantemente nulli array costantemente l'output e array multidimensionali consentano il livello di dettaglio da controllare per oggetti e insiemi movimentazione gerarchie di classi Per utilizzare questo classe code scrittura come segue:

public class Person { 
    String name; 
    int age; 
    boolean smoker; 

    ... 

    public String toString() { 
    return new ToStringBuilder(this). 
     append("name", name). 
     append("age", age). 
     append("smoker", smoker). 
     toString(); 
    } 
} 

alternativa, v'è un metodo che utilizza la riflessione per determinare i campi testare. Poiché questi campi sono di solito private, il metodo, reflectionToString, usa AccessibleObject.setAccessible per cambiare il visibilità dei campi. Ciò non funzionerà con un responsabile della sicurezza, a meno che le autorizzazioni appropriate non siano state impostate correttamente. È anche più lento del test esplicito. Un'invocazione tipica per questo metodo sarebbe simile:

public String toString() { 
    return ToStringBuilder.reflectionToString(this); 
} 
+0

È possibile utilizzare ToStringBuilder al di fuori del metodo toString. ToStringBuilder.reflectionToString (otherObject) –

+1

puoi usare in questo modo: 'ToStringBuilder.reflectionToString (objectRetrieved)' esattamente come ha spiegato Jeff –

+0

@FranciscoSpaeth Cosa succede se hai una lista di variabili? Elenca gli hobby ; Come si può impostare toString? – Jesse

1

È possibile implementare il metodo toString di stampare quello che vuoi, oppure è possibile utilizzare Apache Commons ToStringBuilderhttp://commons.apache.org/lang/api-2.3/org/apache/commons/lang/builder/ToStringBuilder.html e il suo metodo reflectionToString. Non credo che questo riceva attraverso le proprietà (come l'indirizzo per esempio), ma se vuoi vedere l'indirizzo stampato con Street, Door No e City, usa implementare il suo metodo toString per stampare quelle informazioni.

1

È possibile trovare il serializzatore JSON Jackson utile per questo scopo. La libreria di Jackson potrebbe già far parte del tuo stack. In caso contrario, trovare le dipendenze richieste di seguito.

private static final ObjectMapper OBJECT_MAPPER_SINGLETON = new ObjectMapper(); 
public static String toStringUsingJackson(final Object object) { 
    try { 
     return OBJECT_MAPPER_SINGLETON.writeValueAsString(object); 
    } catch (final JsonProcessingException e) { 
     return String.valueOf(object); 
    } 
} 

Esempio di output:

{ "name": "John Doe", "età": 42}

obbligatori Maven/dipendenze Gradle:

  • jackson-core, groupId = com.fasterxml.jackson.core
  • jackson-databind, groupId = com.fasterxml.jackson.core
Problemi correlati