Listeye ama ben çok şaşırdım. Ünite testlerini ve sadece belgeleri inceledim, ama benim sorunum, tam olarak aradığım şeyden emin değilim.Dozer Haritalama HashMap <Key,Value> ben olan bir kaynak nesne var <Value>
cevap
, Dozer veri yapıları gitmek özellikle kadarıyla, benzerine gibi eşleme sahiptir. Bu senin problemini zorlaştırıyor.
Eğer java.util.Map eşleme java.util.Map kadar okudum şüphe yok. Her iki ucunda da Haritalar varsa bu harika çalışır. Ne yazık ki, tüm kralların 'map-set-method' ve tüm kralların erkek java.util.Mist dönüşüm java.util.Map yaparken size yardımcı olmayacaktır. Dozer, Map.get (anahtar) kaynağından ve Map.put'tan (anahtar, değer) hedefe gitmek istiyor. List oyun oynadığı için sıkışmışsınız ('add()' ile başarılı bir şekilde başaramadım ... belki bir yolu var mı?). http://dozer.sourceforge.net/documentation/customconverter.html dibinde
sorununuzu benzemeye görünüyor "Veri Yapısı Dönüşümler" konulu bir bölüm vardır. Cevap "özel bir eşleme yaz" olduğunda, büyük bir yardım görmüyorum, ancak kodunuzu aşağıdaki kurulumla çalışmam gerekiyor.
tüm dozer xml bunu birlikte şansın oldu mu?<mapping>
<class-a>Source</class-a>
<class-b>Destination</class-b>
<field custom-converter="HashMapToListConverter">
<a>dtos</a> <!-- This is a Map<String,DTO> -->
<b>dtos</b> <!-- This is a List<DTOPrime> -->
<a-hint>java.util.LinkedHashMap</a-hint>
<b-hint>java.util.ArrayList</b-hint>
</field>
</mapping>
import org.dozer.*;
import java.util.*;
public class HashMapToListConverter extends DozerConverter<Map, List> implements MapperAware {
private Mapper mapper;
public HashMapToListConverter() {
super(Map.class, List.class);
}
public List convertTo(Map source, List destination) {
List<DTOPrime> convertedList = new ArrayList<DTOPrime>();
for (Object object : source.values()) {
DTO item = (DTO)object;
DTOPrime mappedItem = mapper.map(item, DTOPrime.class);
convertedList.add(mappedItem);
}
return convertedList;
}
public Map convertFrom(List source, Map destination) {
Map<String, DTO> originalToMapped = new LinkedHashMap<String, DTO>();
for (Object object : source) {
DTOPrime item = (DTOPrime)object;
DTO mappedItem = mapper.map(item, DTO.class);
originalToMapped.put(mappedItem.getData(), mappedItem); // FIXME: Since the mapping is lossy, you can decide what the keys of your map are for the reverse mapping...
}
return originalToMapped;
}
public void setMapper(Mapper mapper) {
this.mapper = mapper;
}
}
sen denediniz mi?
destination.setDTOs(new ArrayList<DTO>(source.getDTOs().values()));
Ne yapmaya çalıştığınız belli değil. Genelde
Özel olarak Dozer ile bu eşleştirmeyi yapıyor - http://dozer.sf.net/ – Idcmp
bir melankoli cevap; Daha basit bir yol olduğunu umuyordum - ama tam olarak ne yapıyordum. Başkalarının aynı şeyi yaptığını merak ediyorum. – Idcmp