2015-06-23 14 views
5

Sto lottando con una mappatura di Dozer. Vorrei convertire un java.util.Map in un java.util.List<Code>. Le mie lezioni sono implementate come segue.Dozer, come convertire una mappa in un elenco di tipi complessi

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 
} 

La mia mappatura ha il seguente aspetto.

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

Il convertitore personalizzato.

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

mio convertitore personalizzato riceve sempre un valore null quando convertForm si chiama. Per qualche motivo Dozer tenta di ottenere la chiave values dal mio java.util.Map e questi risultati, come previsto, in un valore null che viene inoltrato al mio convertitore personalizzato. Ma vorrei avere l'intera mappa inoltrata al mio convertitore. Qualcuno può spiegarmi come ottenere questa mappatura personalizzata?

risposta

0

La risposta è fornire alcuni suggerimenti per 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> 

Grazie per avermi aiutato!

Problemi correlati