Java Bean auf eine Map reduzieren

Ich bin bei der Konvertierung steckenJava Bean zuMap. Es gibt viele Ressourcen im Internet, aber leider behandeln alle die Konvertierung einfacher Beans in Maps. Meine sind etwas umfangreicher.

Es gibt ein vereinfachtes Beispiel:

public class MyBean {

  private String firstName;
  private String lastName;
  private MyHomeAddress homeAddress;
  private int age;

  // getters & setters

}

Mein Punkt ist es, @ zu produzierMap<String, Object> was in diesem Fall für folgende Bedingungen zutrifft:

map.containsKey("firstName")
map.containsKey("lastName")
map.containsKey("homeAddress.street")  // street is String
map.containsKey("homeAddress.number")  // number is int
map.containsKey("homeAddress.city")    // city is String
map.containsKey("homeAddress.zipcode") // zipcode is String
map.containsKey("age")

Ich habe versucht mitApache Commons BeanUtils. Beide AnsätzeBeanUtils#describe(Object) undBeanMap(Object) Produziere eine Map, die "deep level" 1 ist (ich meine, es gibt nur"homeAddress" Taste, @ gedrückt haltMyHomeAddress Objekt als Wert). Meine Methode sollte die Objekte tiefer und tiefer eingeben, bis sie einem primitiven Typ (oder String) entsprechen. Dann sollte sie aufhören zu graben und den Schlüssel einfügen, d. H."order.customer.contactInfo.home".

So ist meine Frage: Wie kann es einfach gemacht werden (oder gibt es bereits ein Projekt, das mir das erlauben würde)?

aktualisiere

ch habe die Radiodef-Antwort um Sammlungen, Karten-Arrays und Aufzählungen erweiter

private static boolean isValue(Object value) {
  final Class<?> clazz = value.getClass();
  if (value == null ||
      valueClasses.contains(clazz) ||
      Collection.class.isAssignableFrom(clazz) ||
      Map.class.isAssignableFrom(clazz) ||
      value.getClass().isArray() ||
      value.getClass().isEnum()) {
    return true;
  }
  return false;
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage