2015-06-23 2 views
5

Я борюсь с картированием бульдозера. Я хотел бы преобразовать 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; 
    } 
} 

Мой заказ преобразователь всегда получает null значение, когда convertForm называется. По какой-то причине Dozer пытается получить ключ values из моего java.util.Map, и этот результат, как и ожидалось, в значении null, который перенаправляется на мой пользовательский конвертер. Но я бы хотел, чтобы вся карта была перенаправлена ​​на мой конвертер. Может ли кто-нибудь объяснить мне, как достичь этого пользовательского сопоставления?

ответ

0

Ответ заключается в том, чтобы дать несколько советов для бульдозера.

<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> 

Благодарим вас за помощь!

Смежные вопросы