2016-12-16 6 views
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(); 

しかし、私の例では、送信元アドレスでのリストには、2つの文字列を持っています。オプションでaddress3フィールドをマップする方法があると思いますが、Orika単体テストでは例を見つけることができません。

私は例外をマッピングして取得しようとすると、私が手に出力されている:これは簡単な方法で達成することが可能であるか、私はこのタイプのCustomMapperを記述する必要がない場合

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

誰もが知っています?

答えて

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

私はこれがうまくいく理由を理解したいと思います。オリカは、存在しない指定されたインデックス配列にアクセスしようとすると、例外を返さないでしょうか? –

+0

これはOrikaに何もString-Stringマッピングがないことを伝えていますか? – Daedalus

関連する問題