Я использую Orika 1.4.6, и я бы хотел использовать CustomConverter для отображения одного из моих полей. Когда исходное поле имеет значение null, конвертер, похоже, не вызывается. Вот мой код:Orika: 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();
}
}
Если я отобразить следующий объект:
From from = new From(); //from.source == null
Mapper mapper = new Mapper();
To to = mapper.map(from, To.class);
System.out.println(to.destination);
я ожидаю следующий вывод:
NULL!
Однако я получаю следующее:
null
, который предполагает, что преобразователь не вызывается вовсе и нулевое значение просто копируется из-за
.mapNulls(true)
Если я теперь установлен
.mapNulls(false)
проблема остается такой же, как нулевое значение в поле источника игнорируется который оставляет поле назначения неизменным (в данном случае со значением «defaultValue»).
Можно было бы, например, использовать метод «customize» в сочетании с CustomMapper. Однако это решение намного сложнее в моем реальном приложении, и поэтому решение с CustomConverter кажется гораздо более подходящим.
Кто-нибудь знает, где проблема в этом конкретном примере?
Приветствия, Роберт
Я использую CustomMapper для решения, приемлемого для вас? – Akah
Решение с использованием CustomMapper работает и является правильным. Однако я считаю, что решение, очерченное выше, было бы проще и легче поддерживать в долгосрочной перспективе. Кроме того, мне интересно, является ли это поведение преднамеренным или нет. – Robert
Это было бы хорошим решением, но я не думаю, что преобразователи используются, когда источником является «null». CustomMapper может быть вашим единственным вариантом, но подумайте о том, чтобы спросить у сопровождающего, в последний раз я проверил, что они были активны в списке рассылки Google для проекта. – kab