Cómo convertir tipo largo a tipo cadena
1. Descripción del problema
Cuando estaba renovando el sistema de gestión interna recientemente, descubrí un gran error, es decir, cuando el JS del front-end obtuvo el tipo Long del back-end. parámetros, ¡hubo una pérdida de precisión!
Al principio, era normal usar cartero para simular la solicitud de la interfaz, pero al usar el navegador para realizar la solicitud, ¡ocurrió un problema!
Recurrencia del problema
Abra el navegador y solicite la interfaz, ¡los resultados son los siguientes!
Utilice cartero para simular solicitudes de interfaz, ¡los resultados son los siguientes!
Al principio, realmente no encontré este error, sin embargo, cuando estaba probando, descubrí que la ID pasada por el front-end al back-end no era consistente con la ID almacenada en la base de datos. ¡Y descubrí que JavaScript todavía tiene este talento!
Debido a razones inherentes al tipo Número en JavaScript, no puede representar completamente números de tipo Largo. Cuando la longitud de Largo es mayor a 17 dígitos, habrá un problema de pérdida de precisión.
Cuando cambiamos el ID de usuario anterior a 19 dígitos, echemos un vistazo a los resultados devueltos por la solicitud del navegador.
¡Resultados de la solicitud del navegador!
Cuando el resultado devuelto supera los 17 dígitos, ¡todos los siguientes dígitos se convierten en 0!
2. Solución
¿Qué debes hacer si te encuentras con esta situación?
El primer método: cambiar el tipo largo al tipo String en segundo plano, pero el costo es un poco alto, siempre que implique cambios, es necesario cambiarlo
El segundo método: use herramientas para hacerlo. Convierta el tipo largo al tipo String. Este método puede lograr una conversión global (recomendado)
El tercer método: procesamiento front-end (actualmente no existe un buen método, no se recomienda). )
Debido a que el proyecto involucra mucho código, es imposible cambiar el tipo largo al tipo String, y hay muchas formas de usar el tipo Long. El riesgo de cambiarlo es muy alto. ¡Así que no es recomendable!
El método más ideal es utilizar el proxy aop para interceptar todos los métodos, procesar uniformemente los parámetros de retorno y utilizar herramientas para convertirlos. ¡El proceso es el siguiente!
2.1. Objeto de serialización de la herramienta Jackson
Podemos utilizar el kit de herramientas de Jackson para implementar la serialización de objetos.
Primero agregue las dependencias necesarias en maven
Escriba una clase de herramienta de conversión JsonUtil
A continuación, escriba una clase de entidad Persona para probar
Finalmente, escribimos una clase de prueba para probar el efecto.
Los resultados de salida son los siguientes:
La línea de código más crítica es registrar esta clase de conversión, logrando así que todo se convierta en largo. cadena.
Si quieres formatear una fecha determinada, puedes configurarla globalmente.
También puede configurar un determinado atributo por separado. Por ejemplo, formatee el atributo createTime como aaaa-MM-dd.
Una vez escrita la clase de conversión de la herramienta, es muy simple. Solo necesita serializar los parámetros devueltos por el método de intercepción aop para convertir automáticamente todos los largos en cadenas.
2.2. Configuración de SpringMVC
Si es un proyecto SpringMVC, el funcionamiento también es muy sencillo.
Personalice una clase de implementación y herede de ObjectMapper
Agregue la siguiente configuración al archivo de configuración SpringMVC
2.3, configuración SpringBoot
Si Es un proyecto SpringBoot, el funcionamiento es similar.
Escriba una clase de configuración WebConfig, impleméntela desde WebMvcConfigurer y anule el método configureMessageConverters
3. Resumen
En el desarrollo de proyectos reales, muchos servicios son microservicios puros. el desarrollo no utiliza SpringMVC. En este caso, utilizar la clase de herramienta JsonUtil para implementar la serialización de objetos puede ser una muy buena opción.