我尝试使用Orika将一种类型的地址对象映射到更简单的类型但遇到了一个问题,如果我的列表中没有至少与I'一样多的元素,我会得到一个IndexOutOfBounds异常。我在我的映射器中指定。
以下是我的示例对象:
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 :(得分:0)
只需创建&#34;一个ConverterClass&#34; :
public class NoopConverter extends CustomConverter<String, String> {
@Override
public String convert(String source, Type<? extends String> destinationType, MappingContext mappingContext) {
return source;
}
}
并在Mapper中:
@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();
}