Análisis del problema de utilizar el objeto de método BeanUtils.copyProperties en java para copiar campos con el mismo nombre pero de diferentes tipos y asignar valores vacíos

Escenario del proyecto:

Al copiar entre objetos, el tipo de campo en el objeto dto es String y el tipo de campo en el modelo es BigDecimal. Utilice el método BeanUtils.copyProperties para copiar objetos en lotes.


Descripción del problema

提示:这里描述项目中遇到的问题:

Utilice el método BeanUtils.copyProperties de Spring para descubrir que el campo de tipo String en el dto no se puede convertir al campo de tipo BigDecimal con el mismo nombre en el modelo.


Análisis de causa:

El uso del método BeanUtils.copyProperties de Spring no admite la asignación a campos con el mismo nombre de diferentes tipos.


solución:

Reemplace Spring的BeanUtils.copyProperties método con Apache Commons BeanUtils的copyProperties método.

Análisis de código:

1. El método copyProperties de Apache Commons BeanUtils

  1. Métodos de utilidad

Uso del método

  1. Método de entrada

Insertar descripción de la imagen aquí

  1. Obtener el nombre y valor del campo.

Insertar descripción de la imagen aquí

  1. Hay un método coverForCopy en el método copyPropertry, que copia los campos y realiza la conversión de tipos.

Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

  1. Obtenga el tipo de campo en el objeto de destino y convierta el valor.

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

Finalmente, se asigna el tipo String al campo del mismo nombre del tipo BigDecimal.

Motivos:
1. No existe una función de conversión de tipos incorporada en el método BeanUtils.copyProperties de Spring. Este método se utiliza principalmente para copiar el valor del atributo de un objeto a otro objeto, y la copia del valor del atributo coincide según el nombre del campo.
Si el tipo de campo del objeto de origen no coincide con el tipo de campo del objeto de destino, el método BeanUtils.copyProperties de Spring copiará directamente el valor del campo sin realizar la conversión de tipo. Esto significa que si el tipo de campo del objeto de origen es Cadena y el tipo de campo del objeto de destino es BigDecimal, la cadena no se convertirá automáticamente a BigDecimal.

2. Al copiar propiedades, el método copyProperties de Apache Commons BeanUtils realizará las conversiones correspondientes según los tipos de campos del objeto de origen y los campos del objeto de destino.
Cuando los tipos de campo correspondientes del objeto de origen y del objeto de destino son inconsistentes, BeanUtils intenta realizar la conversión de tipos. Utiliza el mecanismo de conversión de tipos integrado de Java y algunas reglas de conversión personalizadas para manejar conversiones entre diferentes tipos.
Al realizar conversiones de tipos, BeanUtils utiliza reglas de conversión integradas siempre que sea posible, como utilizar el constructor o método de conversión adecuados. Si las reglas predeterminadas no pueden manejar la conversión, puede registrar un convertidor personalizado para manejar la conversión entre tipos específicos.

Supongo que te gusta

Origin blog.csdn.net/hurtseverywhere/article/details/131598032
Recomendado
Clasificación