2016-12-16 71 views
1

我想將一種類型的地址對象映射到使用Orika的更簡單的類型,但遇到了一個問題,我得到一個IndexOutOfBounds異常,如果我的列表中沒有像我在映射器中指定的那麼多的元素。是否可以在Orika中指定List索引作爲可選項?

這裏是我的例子對象:

public class SourceAddress { 
    List<String> addressLines; 
} 

public class DestinationAddress { 
    String address1; 
    String address2; 
    String address3; 
} 

這裏是我的映射:

mapperFactory.getMapperFacade().map(SourceAddress.class, DestinationAddress.class) 
    .field("addressLine[0]", "address1") 
    .field("addressLine[1]", "address2") 
    .field("addressLine[2]", "address3") 
    .mapNulls(false) 
    .byDefault() 
    .register(); 

但在我的例子中的源地址列表中只有兩個字符串。我期望有一種方法可以選擇映射address3字段,但我似乎無法在Orika單元測試中找到示例。

我得到的,當我嘗試映射並得到一個異常的輸出是:

Error occurred: java.lang.IndexOutOfBoundsException: Index: 2, Size: 2 

有誰知道這是否可能以簡單的方式來實現還是我寫這種類型的一個CustomMapper ?

回答

0

只是打造 「ConverterClass」:

public class NoopConverter extends CustomConverter<String, String> { 

    @Override 
    public String convert(String source, Type<? extends String> destinationType, MappingContext mappingContext) { 
    return source; 
    } 
} 

,並在製圖員:

@Override 
public void configure(MapperFactory factory) { 

factory.getConverterFactory() 
     .registerConverter(new NoopConverter()); 

factory.classMap (SourceAddress.class, DestinationAddress.class) 
     .field("addressLine[0]", "address1") 
     .field("addressLine[1]", "address2") 
     .field("addressLine[2]", "address3") 
     .byDefault() 
     .register(); 
} 
+0

我想明白爲什麼這會工作。 Orika在嘗試訪問不存在的指定索引數組時是否還會返回異常? –

+0

這是告訴Orika no-op任何字符串 - >字符串映射,不是嗎? – Daedalus

相關問題