¿Alguien sabe cómo poner un valor constante en un atributo con dozer? No he visto nada al respecto en la documentación del dormilónConstantes en asignaciones de dozer
Respuesta
No estoy del todo seguro de lo que quiere decir, si quiere que Dozer siempre llene BeanB.someField con una constante cada vez que traduzca de BeanA a BeanB.
Es posible que desee registrar un custom converter para esta asignación.
¿Qué le parece aprovechar el mecanismo de eventos?
Para que pueda registrar un oyente que haría la configuración del valor en mappingFinished()
de su oyente. Consultar dozer doc on events para más detalles. Por supuesto, tendría que guardar el código de configuración con algún tipo de condición if ... instanceof
.
Esto funcionó muy bien para mí, aunque puse mi gancho en 'preWritingDestinationValue', por lo que los valores actúan como predeterminados, en lugar de anular lo que ya se ha mapeado. – tzrlk
Las compilaciones recientes de dozer lo hacen más fácil. Puede especificar ambos convertidores personalizados y puede especificar parámetros para ese convertidor para un mapeo de campo dado. Sería trivial crear un único 'ConstantConverter' que tomará un parámetro de entrada y lo colocará en el campo de salida el 100% del tiempo.
En realidad, no es tan fácil con convertidores personalizados. Necesitarías escribir un convertidor para toda la clase que contiene el campo (lo que frustra el propósito de usar dozer en primer lugar) o andar con feas soluciones para unir un convertidor a un solo campo (y ese campo solo existe en un campo). de las clases). Sin embargo, podría ser un buen enfoque en algunos casos (dependiendo de cómo estén estructurados sus objetos). – Lajcik
Esto es bastante simple con ModelMapper:
ModelMapper modelMapper = new ModelMapper();
modelMapper.addMappings(new PropertyMap<SourceClass, DestClass>() {
protected void configure() {
map().setSomeProperty(someConstant);
}
});
Este ejemplo se asigna someConstant
-DestClass.someProperty
.
Se puede extraer más ejemplos y documentos en: http://modelmapper.org
Una posible implementación es:
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;
}
}
Ejemplo:
<field custom-converter-param="CONTANT_VALUE" custom-converter="org.yourcompany.ConstantsCustomConvertor">
<a>a-class-dummyfieldname</a>
<b>b-class-fieldname</b>
</field>
Este convertidor personalizado es supone que la clase b -fieldname es de tipo String.
- 1. asignaciones Dozer no triviales
- 2. dozer Asignación de propiedad booleana
- 3. Configurar convertidores personalizados utilizando Dozer Java API
- 4. Dozer 5.3.2. Programado programáticamente convertidores personalizados?
- 5. Python: excepciones en las asignaciones
- 6. ¿Alternativa al dozer para el mapeo de frijoles?
- 7. Evitar que Dozer active la carga diferida de Hibernate
- 8. Asignaciones de teclas en el cliente RealVNC
- 9. SSIS - asignaciones dinámicas de columnas
- 10. colecciones de asignaciones utilizando AutoMapper
- 11. asignaciones de puntero const char
- 12. Asignaciones y primitivas de Java
- 13. Constantes dinámicas en PHP?
- 14. valores constantes en Rails
- 15. Definir constantes en Django
- 16. Constantes en XAML
- 17. Constantes en MATLAB
- 18. Anulando constantes en Java
- 19. Constantes estáticas en C#
- 20. constantes #defining en C++
- 21. Constantes globales en Groovy
- 22. Constantes de clase en python
- 23. Constantes de Java en JSP
- 24. Redefinición de constantes en PHP
- 25. Constantes de autocarga en PHP?
- 26. Constantes hash en Perl
- 27. Constantes globales en PHPUnit
- 28. Constantes físicas en R
- 29. constantes calculadas en C#
- 30. Constantes etiquetadas en LaTeX
Sí, eso es exactamente lo que quiero. Me preguntaba si era posible hacerlo directamente sin un convertidor personalizado. –
Gracias por la respuesta, por cierto. –
Creo que sus únicos métodos son usar una conversión personalizada o hacerlo manualmente cuando invoque a Dozer. Dozer solo realmente maneja el mapeo de un bean a otro, y no le da mucho espacio para insertar otra lógica (lo cual tiene sentido, ya que no está destinado a hacer eso). –