【发布时间】:2015-06-23 07:25:44
【问题描述】:
我正在为推土机映射而苦苦挣扎。我想将java.util.Map 转换为java.util.List<Code>。我的类实现如下。
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
}
我的映射如下所示。
<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>
自定义转换器。
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;
}
}
当调用convertForm 时,我的自定义转换器总是收到null 值。出于某种原因,Dozer 试图从我的java.util.Map 中获取密钥values,并且正如预期的那样,这会导致null 值被转发到我的自定义转换器。但我想将整个地图转发给我的转换器。谁能解释一下如何实现这个自定义映射?
【问题讨论】: