El problema de la pérdida de precisión cuando el tipo Long del back-end se pasa al front-end

El problema surge: el atributo id del Java Bean en el backend usa el tipo Long y corresponde a la clave principal de la base de datos usando el tipo bigint.Cuando los datos se pasan al frontend usando JSON, el final de los datos recibidos por el frontend se convertirá en 0. (Se produjo el problema de la pérdida de precisión)
La causa del problema: el rango que puede representar long en Java es mayor que number en js, lo que significa que algunos valores no se pueden almacenar en js (convirtiéndose en valores inexactos), lo que hace que los últimos dígitos de Id se conviertan directamente en 0.
 

 

 El front-end recibe e imprime:

 Solución 1 (Backend) : cambie la identificación del backend a un tipo de cadena, y el frontend lo recibirá como una cadena sin pérdida de precisión


Solución 2 (front-end) : la solución front-end 1 introduce json-bigint en el front-end,

   npm install json-bigint

Solución 3 (front-end) : donde se encapsula axios , transformResponse permite la modificación de los datos de respuesta antes de pasarlos a then/catch.

 Modifique el código fuente de axios, busque transformResponse en node_modules/axios/lib/default.js y cambie su contenido a:

transformResponse: [function transformResponse(data) {
    /*eslint no-param-reassign:0*/
    if (typeof data === 'string') {
      try {
        data = JSON.parse(data);
      } catch (e) { /* Ignore */ }
    }
    return data;
  }],

Solución 4 (interfaz):

Cuando el fondo se transmite al primer plano, los datos de tipo largo se convierten al tipo de cadena. Puede manipular directamente los datos del objeto devuelto, toString() los datos de tipo largo. (recomendar)

Supongo que te gusta

Origin blog.csdn.net/weixin_43923808/article/details/131770665
Recomendado
Clasificación