【问题标题】:Dozer, how to convert a map to a list of complex typesDozer,如何将地图转换为复杂类型的列表
【发布时间】: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 值被转发到我的自定义转换器。但我想将整个地图转发给我的转换器。谁能解释一下如何实现这个自定义映射?

【问题讨论】:

    标签: java dozer


    【解决方案1】:

    答案是为 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>
    

    谢谢你帮助我!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多