Lösen Sie das Problem der Java-Hintergrund-ID mithilfe der Snowflake-ID. JSONbig behandelt die letzten vier Ziffern von 19-Bit-Vue als 0

Verwenden Sie zunächst den Feldtyp „MySQL-ID“ der Datenbank als „bigint“.

Problemszenario: Verwenden Sie IdWork.uuid();, um eine zufällige 20-stellige lange Ganzzahl zu erhalten; bei der Abfrage basierend auf der ID auf der Vue-Seite können die Daten nicht gefunden werden; da die ID nicht der ursprünglichen Datensatz-ID entspricht; die die letzten Ziffern sind alle 0;

Die vorherige Methode bestand darin, den Zeichenfolgentyp der zurückgegebenen Vo-Entitäts-ID im Hintergrund-Java-Programm zu ändern. Dies kann gelöst werden.




@TableId(value = "id",type = IdType.ID_WORKER)
@JsonSerialize(using = ToStringSerializer.class)
private Long id;

Ich bin kürzlich wieder auf dieses Problem gestoßen. Kann es nicht im Frontend gelöst werden? Also habe ich in einem Dokument nach einer Lösung gesucht, indem ich das Plug-in jsonbigint eingeführt habe, und nachdem ich es ausprobiert hatte, funktionierte es;

Ich habe die Anpassung basierend auf der Ruoyi-Plattform (ruoyi.vip) vorgenommen. Hier habe ich die ursprüngliche selbsterhöhende ID in die Snowflake-ID geändert.

Ändern Sie die Frontend-Konfiguration wie folgt:

Suchen Sie zuerst request.js auf der Vue-Seite und fügen Sie Folgendes hinzu, wenn Axios es einheitlich behandelt:

axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
import JSONbig from 'json-bigint'
// 创建axios实例
const service = axios.create({
  // axios中请求配置有baseURL选项,表示请求URL公共部分
  baseURL: process.env.VUE_APP_BASE_API,
  // `transformResponse` 在传递给 then/catch 前,允许修改响应数据
  transformResponse: [function(data) {
    try {
      // 作用1:把json字符串转为js对象
      // 作用2:把里面的大数字做安全处理
        return JSONbig.parse(data)
      } catch (e) {
        return data
      }
  }],
  // 超时
  timeout: 10000
})

Spezifischer Referenzlink: https://blog.csdn.net/wz5208/article/details/111479717

Auffüllen:

Kürzlich bin ich bei der Verwendung auf eine große Falle gestoßen; nach der Generierung der ID wird sie in Segmenten verarbeitet; sie wird als Big-Number-Array gespeichert; wenn das zweite Segment mit 0 beginnt, geht ein Bit verloren; was für ein Idiot; eine Überprüfung Methode wurde später hinzugefügt;

Die Methode ist wie folgt (verworfen) :

/**
 * 解决JSONbig插件第二段为0开头丢失一位问题
 * @param {*} data JSONbig 数组
 */
export function repairJSONbigBug(data) {
  let val=String(data.join(""))
  if(val.length<19){
    val=val.slice(0, 5) + '0' + val.slice(5);
  }
	return val;
}

 Vollständig:

Denn wenn der zweite Absatz bei der Verarbeitung von Daten am Anfang mehrere Nullen enthält, wird er ignoriert, was zu einer Nichtübereinstimmung zwischen der gespeicherten ID und der tatsächlichen ID führt. Daher ist eine spezielle Verarbeitung erforderlich:

export function repairJSONbigBug(data) {
  let val=String(data.join(""))
  if(val.length<19){
    let count=19-val.length;
    // 0的填充
    let zeroCount='';
    for(let a=0;a<count;a++){
      zeroCount=zeroCount+'0'
    }
    val=val.slice(0, 5) + zeroCount + val.slice(5);
  }
	return val;
}

Übergeben Sie diesen Wert auf der Anwendungsseite und erhalten Sie ihn erneut:

        that.messageAuthList.filter(item=>{
          console.log("item.authId.c::"+item.authId.c)
          let jsoNbigBug = repairJSONbigBug(item.authId.c)
          console.log("jsoNbigBug::"+jsoNbigBug)
          item.authId=jsoNbigBug 
        })

Supongo que te gusta

Origin blog.csdn.net/xingfaup/article/details/118631395
Recomendado
Clasificación