Sto lottando con una mappatura di Dozer. Vorrei convertire un java.util.Map
in un java.util.List<Code>
. Le mie lezioni sono implementate come segue.Dozer, come convertire una mappa in un elenco di tipi complessi
public class A {
private List<Code> values;
}
class B {
private Map<String, String> values;
}
class Code {
private String key;
private String value;
// getter & setter ommitted
}
La mia mappatura ha il seguente aspetto.
<mapping wildcard="true">
<class-a>A</class-a>
<class-b>B</class-b>
<field custom-converter="ABCustomConverter">
<a>values</a>
<b>values</b>
</field>
</mapping>
Il convertitore personalizzato.
public class ABCustomConverter extends DozerConverter<List<Code>, Map<String, String>> {
public ABCustomConverter() {
super((Class<List<Code>>) (Class<?>) List.class, (Class<Map<String, String>>) (Class<?>) List.class);
}
@Override
public Map<String, String> convertTo(List<Code> source, Map<String, String> destination) {
throw new NotImplementedException();
}
@Override
public List<Code> convertFrom(Map<String, String> source, List<Code> destination) {
if (source == null) return null;
List<Code> modelList = Lists.newArrayListWithCapacity(source.size());
for (String key : source.keySet()) {
Code model = new Code();
model.setKey(key);
model.setValue(source.get(key));
modelList.add(model);
}
return modelList;
}
}
mio convertitore personalizzato riceve sempre un valore null
quando convertForm
si chiama. Per qualche motivo Dozer tenta di ottenere la chiave values
dal mio java.util.Map
e questi risultati, come previsto, in un valore null
che viene inoltrato al mio convertitore personalizzato. Ma vorrei avere l'intera mappa inoltrata al mio convertitore. Qualcuno può spiegarmi come ottenere questa mappatura personalizzata?