Java 带贴图和自定义转换器的推土机贴图不起作用
我想用dozer将一个具有键值对列表的类映射到一个hashmap 键值对 这是包含键值对的类Java 带贴图和自定义转换器的推土机贴图不起作用,java,dozer,Java,Dozer,我想用dozer将一个具有键值对列表的类映射到一个hashmap 键值对 这是包含键值对的类 public class TExtensions { private List<SExtension> item; // Getter, Setter public class SExtension { private String field; private String value; // Getter, Setter B类 我的转换器 公共
public class TExtensions {
private List<SExtension> item;
// Getter, Setter
public class SExtension {
private String field;
private String value;
// Getter, Setter
B类
我的转换器
公共类扩展转换器扩展DozerConverter
{
公共扩展转换器(){
super(Map.class、TExtensions.class);
}
@凌驾
公共文本信息转换到(地图来源、文本信息目的地){
if(source!=null&&!source.isEmpty()){
destination=新的TExtensions();
六向拉伸;
for(对象键:source.keySet()){
扩展=新的六分之一张力();
extension.setField(key.toString());
extension.setValue(source.get(key.toString());
destination.getItem().add(扩展名);
}
}否则{
目的地=空;
}
返回目的地;
}
@凌驾
公共地图转换源(文本源、地图目的地){
如果(源!=null){
destination=newhashmap();
for(SExtension扩展名:source.getItem()){
destination.put(extension.getField(),extension.getValue());
}
}否则{
目的地=空;
}
返回目的地;
}
}
当我通过配置进行映射时,它工作得很好,但我不能使用该功能,因为类并不总是类路径的一部分,因为它们是可选模块的一部分。因此,我必须将映射放在其他地方,并将其放入映射文件中,但这不起作用
配置
那管用,但我不能用
<configuration>
<custom-converters>
<converter type="ExtensionConverter">
<class-a>java.util.Map</class-a>
<class-b>TExtensions</class-b>
</converter>
</custom-converters>
</configuration>
java.util.Map
纺织
映射文件
这不起作用,但似乎是唯一的选择
<mapping>
<class-a>FooModel</class-a>
<class-b>FooWs</class-b>
<field custom-converter="ExtensionConverter">
<a>extensions</a>
<b>extensions</b>
</field>
</mapping>
食品模型
福斯
扩展
扩展
当我使用映射文件(而不是配置)进行映射时,它会从映射映射到文本,但不会从另一个方向映射。调试转换器时,源对象和目标对象都为null
我已经用推土机5.5.1和推土机5.4.0对此进行了测试
现在我可以想出两个解决我问题的办法
public class ExtensionConverter extends DozerConverter<Map, TExtensions>
{
public ExtensionConverter() {
super(Map.class, TExtensions.class);
}
@Override
public TExtensions convertTo(Map source, TExtensions destination) {
if (source != null && !source.isEmpty()){
destination = new TExtensions();
SExtension extension;
for (Object key : source.keySet()){
extension = new SExtension();
extension.setField(key.toString());
extension.setValue(source.get(key).toString());
destination.getItem().add(extension);
}
} else{
destination = null;
}
return destination;
}
@Override
public Map convertFrom(TExtensions source, Map destination) {
if (source != null){
destination = new HashMap<String, String>();
for (SExtension extension : source.getItem()){
destination.put(extension.getField(), extension.getValue());
}
} else{
destination = null;
}
return destination;
}
}
<configuration>
<custom-converters>
<converter type="ExtensionConverter">
<class-a>java.util.Map</class-a>
<class-b>TExtensions</class-b>
</converter>
</custom-converters>
</configuration>
<mapping>
<class-a>FooModel</class-a>
<class-b>FooWs</class-b>
<field custom-converter="ExtensionConverter">
<a>extensions</a>
<b>extensions</b>
</field>
</mapping>