1

我正在尝试使用 Orika 将一种类型的地址对象映射到更简单的类型,但遇到了一个问题,如果我的列表没有至少与我在映射器中指定的一样多的元素,我会收到 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?

4

1 回答 1

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();
}
于 2017-02-07T10:00:05.350 回答