J'utilise Orika 1.4.6 et j'aimerais utiliser un CustomConverter pour mapper un de mes champs. Lorsque le champ source est nul, le convertisseur ne semble pas être appelé. Voici mon code:Orika: CustomConverter n'est pas appelé sur les valeurs nulles
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();
}
}
Si je mapper l'objet suivant:
From from = new From(); //from.source == null
Mapper mapper = new Mapper();
To to = mapper.map(from, To.class);
System.out.println(to.destination);
J'attends la sortie suivante:
NULL!
Cependant, je reçois le texte suivant:
null
qui suggère que le convertisseur n'est pas appelée du tout et la valeur NULL est simplement copié, en raison de
.mapNulls(true)
Si je vous présenter maintenant
.mapNulls(false)
le problème reste le même, que la valeur nulle dans le champ source est ignorée ce qui laisse le champ de destination inchangé (dans ce cas, avec la valeur "defaultValue").
Il serait par exemple possible d'utiliser la méthode "customize" en combinaison avec un CustomMapper. Cependant cette solution est beaucoup plus complexe dans ma vraie application et donc la solution avec le CustomConverter semble beaucoup plus appropriée.
Est-ce que quelqu'un sait où le problème est dans cet exemple spécifique?
Cheers, Robert
L'utilisation d'un CustomMapper est-elle une solution acceptable pour vous? – Akah
La solution utilisant un CustomMapper fonctionne et est correcte. Cependant, je pense que la solution esquissée ci-dessus serait plus simple et plus facile à maintenir à long terme. En outre, je suis curieux de savoir si ce comportement est intentionnel ou non. – Robert
Ce serait une bonne solution, mais je ne pense pas que les convertisseurs sont utilisés lorsque la source est 'null'. Un CustomMapper peut être votre seule option, mais pensez à demander au mainteneur, j'ai vérifié qu'ils étaient actifs sur une liste de diffusion Google pour le projet. – kab