簡體   English   中英

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值。 出於某種原因,推土機試圖拿到鑰匙values從我java.util.Map ,這導致,如預期,在一個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>

謝謝你幫助我!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM