I am struggling with a Dozer mapping. I would like to convert a java.util.Map
to a java.util.List<Code>
. My classes are implemented as follows.
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
}
My mapping looks as follows.
<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>
The custom converter.
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;
}
}
My custom converter always receives a null
value when convertForm
is called. For some reason Dozer tries to get the key values
from my java.util.Map
and this results, as expected, in a null
value that is forwarded to my custom converter. But I would like to get the whole map forwarded to my converter. Can someone explain me how to achieve this custom mapping?
The answer is to provide some hints for Dozer.
Thank you for helping me out!