Dozer,如何将地图转换为复杂类型列表
Dozer, how to convert a map to a list of complex types
我正在努力处理 Dozer 映射。我想将 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
值转发到我的自定义转换器。但我想将整个地图转发给我的转换器。有人可以向我解释如何实现此自定义映射吗?
答案是为Dozer提供一些提示。
<mapping wildcard="true">
<class-a>A</class-a>
<class-b>B</class-b>
<field custom-converter="ABCustomConverter">
<a>values</a>
<b>values</b>
<a-hint>java.util.LinkedHashMap</a-hint>
<b-hint>java.util.ArrayList</b-hint>
</field>
</mapping>
谢谢你帮助我!
我正在努力处理 Dozer 映射。我想将 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
值转发到我的自定义转换器。但我想将整个地图转发给我的转换器。有人可以向我解释如何实现此自定义映射吗?
答案是为Dozer提供一些提示。
<mapping wildcard="true">
<class-a>A</class-a>
<class-b>B</class-b>
<field custom-converter="ABCustomConverter">
<a>values</a>
<b>values</b>
<a-hint>java.util.LinkedHashMap</a-hint>
<b-hint>java.util.ArrayList</b-hint>
</field>
</mapping>
谢谢你帮助我!