2016-12-16 67 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

相关问题