Est-ce que quelqu'un sait comment mettre une valeur constante dans un attribut avec un bulldozer? Je n'ai rien vu à ce sujet dans la documentation du bulldozerConstantes dans les cartographies de bulldozer
Répondre
Vous ne savez pas exactement ce que vous voulez dire - si vous voulez que Dozer remplisse toujours BeanB.someField avec une constante quand vous mappez de BeanA à BeanB?
Vous souhaiterez peut-être enregistrer un custom converter pour ce mappage.
Pourquoi ne pas profiter du mécanisme des événements?
Donc, vous pouvez enregistrer un écouteur qui ferait le réglage de la valeur dans mappingFinished()
de votre écouteur. Consultez dozer doc on events pour plus de détails. Bien sûr, vous devrez garder le code de réglage avec une sorte de condition if ... instanceof
.
Cela a très bien fonctionné pour moi, bien que je mette mon crochet sur preWritingDestinationValue, donc les valeurs agissent comme des valeurs par défaut, plutôt que de remplacer ce qui a déjà été mappé. – tzrlk
Des constructions récentes de bulldozer facilitent la tâche. Vous pouvez spécifier à la fois les convertisseurs personnalisés et, vous pouvez spécifier les paramètres de ce convertisseur pour un mappage de champ donné. Il devrait être trivial de créer un seul 'ConstantConverter' qui prendra un paramètre d'entrée et le mettra dans le champ de sortie 100% du temps.
En fait, ce n'est pas si simple avec les convertisseurs personnalisés. Vous devez soit écrire un convertisseur pour toute la classe contenant le champ (ce qui va à l'encontre du but de l'utilisation de dozer) ou singe avec des solutions laides pour attacher un convertisseur à un seul champ (et ce champ n'existe que sur un seul des classes). Cela peut être une bonne approche dans certains cas (en fonction de la structure de vos objets). – Lajcik
C'est assez simple avec ModelMapper:
ModelMapper modelMapper = new ModelMapper();
modelMapper.addMappings(new PropertyMap<SourceClass, DestClass>() {
protected void configure() {
map().setSomeProperty(someConstant);
}
});
Cet exemple les cartes someConstant
-DestClass.someProperty
.
Vous pouvez consulter d'autres exemples et documents à: http://modelmapper.org
Une implémentation possible est:
public class ConstantsCustomConvertor implements ConfigurableCustomConverter{
private String pararamter;
@Override
public Object convert(Object existingDestinationFieldValue, Object sourceFieldValue, Class<?> destinationClass, Class<?> sourceClass) {
return pararamter;
}
@Override
public void setParameter(String parameter) {
this.pararamter = parameter;
}
}
Exemple:
<field custom-converter-param="CONTANT_VALUE" custom-converter="org.yourcompany.ConstantsCustomConvertor">
<a>a-class-dummyfieldname</a>
<b>b-class-fieldname</b>
</field>
Cette coutume Convertor est suppose que le b-classe -fieldname est de type String.
- 1. valeurs constantes dans Rails
- 2. Les constantes de chaîne sont-elles surestimées?
- 3. NSXMLParser et les constantes d'erreur
- 4. nhibernate ne pas prendre des cartographies de l'assemblage
- 5. Comment définir les constantes de classe-portée dans ruby?
- 6. Utilisation de variables constantes dans les expressions Objective-C?
- 7. Déclaration de constantes dans un projet
- 8. entier constantes
- 9. Variables de serveur constantes?
- 10. VBA dans Excel: fichier de constantes globales
- 11. Modification des constantes pour les tests unitaires
- 12. Constantes d'environnement
- 13. Surcharge des constantes dans les classes dérivées en C#
- 14. Comment puis-je réduire la duplication dans les constantes?
- 15. Les constantes définies dans environment.rb disparaissent en mode développement
- 16. C Constantes
- 17. Haskell: Comment obtenir les valeurs de # define-d constantes?
- 18. Comment éviter de redéclater accidentellement les constantes globales en C++?
- 19. liaison de chemins flash, constantes
- 20. (N) Hibernate Sélection Constantes dans Query
- 21. Comment obtenir toutes les constantes de shader (uniformes) d'un ID3DXEffect?
- 22. Rails - Constantes Hash?
- 23. Constantes de caractères multi-octets et constantes de type d'en-tête de fichier bitmap
- 24. Constantes dans une application Web C#
- 25. Constantes et annotation
- 26. constantes sur itérer Enum dans JSP
- 27. Constantes statiques en C#
- 28. Partage de constantes sur un service WCF
- 29. Utilisation des constantes de tableau dans Excel fonction vba
- 30. Comment configurer les constantes comme ceci - Constants.Page.Title.MyCase - en C#?
Oui, c'est exactement ce que je veux. Je me demandais s'il était possible de le faire directement sans un convertisseur personnalisé. –
Merci pour la réponse, soit dit en passant. –
Je crois que vos seules méthodes sont d'utiliser un convertisseur personnalisé ou de le faire à la main lorsque vous invoquez Dozer. Dozer ne gère réellement que le mappage d'un bean à un autre et ne vous laisse pas beaucoup de place pour insérer une autre logique (ce qui est logique, car il n'est pas censé le faire). –