2014-11-28 34 views
5

Bir hiyerarşik Map<String, Object> ile eşleştirmem gereken bir proje üzerinde çalışıyorum; burada ikinci parametrenin String veya Map<String, Object> olması beklenir. Şimdiye kadar, ModelMapper harika çalıştı, ancak belirli bir dönüşümle ilgili sorun yaşıyorum. Model basit bir işaretleyici arayüzü şu, Verilen:Haritadan Haritaya nasıl eşlenir?

class Client implements Model { 
    String firstName; 
    String lastName; 
    List<Organization> organizations = new ArrayList<>(); 
} 

Organization varsayarsak benim işaretleyici arayüzünü Model uygular ama aksi keyfi yapılandırılmıştır, ben harita edebilmek istiyorum aşağıdaki Client için:

Map source = new HashMap(){{ 
    put("firstName", "John"), 
    put("lastName", "Smith"), 
    put("organizations", new HashMap(){{ 
     put("0", new HashMap(){{ 
      put("id", "1234"); 
     }}); 
     put("abc", new HashMap(){{ 
      put("id", "5678"); 
     }}); 
    }}); 
}}; 

Özetle: ModelMapper'ın harita tuşlarını bırakmasını ve yalnızca kuruluşun mülkiyetine girerken sadece değer listesini kullanmasını nasıl sağlayabilirim? Başarısız olan kuruluşlar mülkiyeti boş çıkıyor. Bunu yapmak için iyi bir nedenim olduğunu ve kötü bir örnek olduğunu varsayabilirsin!

Girişiniz için şimdiden teşekkür ederiz!

Düzenleme ben boşuna bir Collection<Model> bir Map dönüştürme idare edecek bir Converter inşa etmeye kalkışmış. Verilen:

new Converter<Map, Collection<DataTransportObject>>() { 
    @Override 
    public Set convert(MappingContext<Map, Collection<DataTransportObject>> context) { 
     LOG.debug("Here"); 
     Set<DataTransportObject> result = new HashSet<>(); 
     return result; 
    } 
} 

bu iki sorun vardır:

  1. Görünüşe ModelMapper Map herhangi uygulama kaynağı olarak verilir nedenle zaman, miras bakmaz, dönüştürücü çalıştırılmaz. Örneğin, dönüştürücüyü HashMap kabul edip, bir HashMap kaynağı olarak değiştirirseniz, o zaman çalışır. Genel bilgiler olmaksızın List veya Set sınıfları
  2. context.getGenericDestinationType()10. ModelMapper normal koşullarda karmaşık model grafikler oluşturmayı nasıl başarır?
+0

Sorunuzun farklı bölümlerinde farklı şeyler soruyorsunuz gibi görünüyor. Haritanızı bir 'Client' örneğine dönüştürmek mi yoksa bir Listeye mi dönüştürmek istiyorsunuz? – VGR

+0

Verilen harita bir 'Client' örneğine dönüştürülmelidir. Ancak, olduğu gibi, ModelMapper 'kuruluşlar' mülkünü ele almayacak ve boş bırakacaktır. MapMapper'ın harita değeri listesini 'kuruluşlar 'özelliğine itmesini istiyorum. – ironhardchaw

+0

Bence BeanUtils veya ObjectMapper'a ihtiyacınız var. [http://stackoverflow.com/questions/739689/how-to-convert-a-java-object-bean-to-key-value-pairs-and-vice-versa][1 adresinde cevabı görebilirsiniz. ] [1]: http://stackoverflow.com/questions/739689/how-to-convert-a-java-object-bean-to-key-value-pairs-and-vice-versa –

cevap

0

Sizin durumunuzda, Pojo sınıfı için ek ayarlayıcı kullanabileceğinizi düşünüyorum. Ve sonra haritayı nesneye dönüştürmek için kütüphaneleri ObjectMapper/BeanUtils/... olarak kullanın. Örneğin:

void setOranizations(Map<String, Organization> map) { 
    this.organizations = map.values(); 
} 
+0

Bu sorunun amacı, bir koleksiyonun bir değer listesi olarak bir araya getirilmesidir. Mesele, keyfi anahtarlar ve keyfi değerler içeren bir hiyerarşik harita verdiğim ve anahtarları haritadan çıkarmam ve değer listesini kullanabilmem gerekiyor. – ironhardchaw

+0

Modelinize ek setter ekleyebilir misiniz? Örneğin setOrganizations (Harita haritası) {this.organization = map.values}; –

+0

Bunu düşünmediğime inanamıyorum! İstediğim gibi değil ama kesinlikle geçerli bir çözüm. ObjectMapper ek olarak ModelMapper ile denedim ve her ikisi için de çalışır. Yorumunuzu bir cevaba dönüştürecek olursanız, özellikle kabul edilen yanıt olarak işaretleyeceğim, çünkü kütüphaneleri değiştirmeden orijinal soru için de geçerlidir. – ironhardchaw

İlgili konular