簡體   English   中英

將自定義參數傳遞到推土機映射

[英]Passing custom parameter to Dozer mapping

我在自定義轉換器的文檔中閱讀到,對於字段映射上的自定義轉換器,我可以傳遞自定義參數。 這對我來說還不夠好,因為在構建映射器時只指定了一次。

進行實際映射時,有什么方法可以傳遞此參數?

mapper.map(sourceObject, Destination.class, "parameter"); 

我的實際問題是,我想從一個包含多語言屬性的類進行映射,而目的地應僅具有“選擇的”語言屬性。

源類

public class Source
{
   // Fields in default language
   private String prop1;
   private String prop2;

   // List containing all translations of properties
   private List<SourceName> sourceNames; 

}

public class SourceName
{
   private int lang_id;
   private String prop1;
   private String prop2;   
}

目的地艙位

public class Destination
{
       // Fields translated in choosen language
       private String prop1;
       private String prop2;
}

我的目標是能夠做到這一點:

Destination destination = mapper.map(source, Destination.class, 4); // To lang_id 4

謝謝

我做了這個函數(FIELDMAP var是“ fieldMap”):

public static <T> T mapWithParam(Object source, Class<T> destinationClass, String param) throws MappingException {

    T toReturn = null;
    DozerBeanMapper dbm = (DozerBeanMapper) MapperFactory.getMapper();
    MappingMetadata mmdt = dbm.getMappingMetadata();
    ClassMappingMetadata classMapping = mmdt.getClassMapping(source.getClass(), destinationClass);
    List<FieldMappingMetadata> fielMappingMetadata = classMapping.getFieldMappings();
    List<OriginalFieldMap> originalValues = new ArrayList<OriginalFieldMap>();
    for (FieldMappingMetadata fmmd : fielMappingMetadata) {
        if (fmmd.getCustomConverter() != null) {
            try {
                Class<?> cls = Class.forName(fmmd.getCustomConverter());
                if (cls.newInstance() instanceof ConfigurableCustomConverter) {
                    FieldMap modifieldFieldMap = (FieldMap)ReflectionHelper.executeGetMethod(fmmd, FIELDMAP);
                    originalValues.add(new OriginalFieldMap(modifieldFieldMap, modifieldFieldMap.getCustomConverterParam()));
                    modifieldFieldMap.setCustomConverterParam(param);
                    ReflectionHelper.executeSetMethod(fmmd, FIELDMAP, modifieldFieldMap);
                }
            } catch (ReflectionException | ClassNotFoundException | InstantiationException | IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    }
    toReturn = dbm.map(source, destinationClass);

    for (OriginalFieldMap ofp : originalValues) {
        ofp.getFieldMap().setCustomConverterParam(ofp.getOriginalValue());
    }
    return toReturn;
}

和OriginalFieldMap類:

import org.dozer.fieldmap.FieldMap;

public class OriginalFieldMap{
    FieldMap fieldMap;
    String originalValue;

    public OriginalFieldMap(FieldMap fieldMap, String originalValue) {
        super();
        this.fieldMap = fieldMap;
        this.originalValue = originalValue;
    }
    public FieldMap getFieldMap() {
        return fieldMap;
    }
    public String getOriginalValue() {
        return originalValue;
    }
}

暫無
暫無

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

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