使用地图和自定义转换器的推土机映射不起作用

时间:2015-03-12 16:19:50

标签: java dozer

我想将带有键值对List的类映射到带有dozer的hashmap。

键值对

这是持有键值对的类

public class TExtensions {
    private List<SExtension> item;
    // Getter, Setter

public class SExtension {
    private String field;
    private String value;
    // Getter, Setter

这是我的两个豆子

A类

public class FooModel {
    private Map extensions;
    // Getter, Setter

B类

public class FooWs {
    private TExtensions extensions;

我的转换器

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>

当我使用映射文件(而不是配置)进行映射时,它会从Map映射到TExtension,但不会映射到另一个方向。当我调试Converter时,源对象和目标对象都为空。

我已经使用Dozer 5.5.1和Dozer 5.4.0进行了测试

现在我可以为我的问题考虑两个解决方案

  1. 为转换器位于类路径中的两种类型加载自定义转换器
  2. 解决映射文件的问题
  3. 我会优先考虑第一个解决方案,因为它似乎更清晰,我不必复制映射文件。

    你有什么想法吗?

0 个答案:

没有答案