Orika 1.4.6を使用していて、CustomConverterを使用してフィールドの1つをマッピングしたいと考えています。ソースフィールドがNULLの場合、コンバータは呼び出されていないようです。ここに私のコードは次のとおりです。Orika:null値でCustomConverterが呼び出されない
class From {
String source;
}
class To {
String destination = "defaultValue";
}
public class Mapper extends ConfigurableMapper {
private class MyConverter extends CustomConverter<String, String> {
@Override
public String convert(String source, Type<? extends String> destinationType) {
if (null == source) {
return "NULL!";
}
return "->" + source + "<-";
}
}
@Override
protected void configure(MapperFactory factory) {
factory.getConverterFactory().registerConverter("converter", new MyConverter());
factory.classMap(From.class, To.class)
.fieldMap("source", "destination")
.mapNulls(true)
.converter("converter")
.add()
.register();
}
}
私は次のオブジェクトマップする場合:私は、次を得るしかし
NULL!
:
From from = new From(); //from.source == null
Mapper mapper = new Mapper();
To to = mapper.map(from, To.class);
System.out.println(to.destination);
を私は次の出力を期待
null
これは、コンバータ私は今
.mapNulls(false)
を設定した場合は、ソースフィールド内のNULL値は無視される問題は、同じままなので
.mapNulls(true)
の、すべてのヌル値を単純にコピーされる時に呼び出されていません宛先フィールドは変更されません(この場合、値「defaultValue」)。
たとえば、CustomMapperと組み合わせて「customize」メソッドを使用することは可能です。しかし、このソリューションは私の実際のアプリケーションではもっと複雑であり、そのためCustomConverterを使ったソリューションがはるかに適しているようです。
誰かがこの特定の例で問題がどこにあるか知っていますか?
乾杯、 ロバート
私はCustomMapperを使用してあなたに受け入れられるソリューションを提供していますか? – Akah
CustomMapperを使用したソリューションが正しく動作しています。しかし、私は、上にスケッチした解決策は、長期的には維持するのが簡単で簡単になると感じています。 また、この動作が意図的であるかどうかは不思議です。 – Robert
これは良い解決策ですが、ソースが「ヌル」のときはコンバーターが使用されていないと思います。 CustomMapperはあなたの唯一の選択肢かもしれませんが、最後に私は彼らがプロジェクトのGoogleメーリングリストでアクティブであることを確認して、メンテナを尋ねることを検討してください。 – kab