バックエンドからフロントエンドにLongタイプのデータが転送され、データが一致しない


1.背景:
バックエンド商品エンティティのidフィールドはLongであり,ESからパッケージが検出され,Jsonとしてフロントエンドに返される.その結果,フロントエンドに示されたidはすべて1244864296175140000であることが分かった.バックエンドで印刷したデータから,実際のidは,1244864296175140890,1244864296175140889などであることが分かった.バックエンドに印刷されたJsonをオンラインJsonツールに直列に入れると、idも1244864296175140900になることがわかります.これで、自分のコードロジックの問題を排除しました..
2.理由:
バックエンドがフロントエンドにLongタイプを送信し、Longタイプデータが17ビットより大きい場合.フロントエンドで取得したデータ:16位は四捨五入し,17位以降のデータは自動的に0に置き換えられる),Jsonでは精度が失われる場合がある.
泣きました...
3.解決
(1)Longの代わりにStringを使う:この方式は代価が大きすぎて、データベースのidタイプは一般的にbigintで、Javaの中でLongに対応します.だから修正したらいろいろなところを修正する必要があります.(2)Longタイプを修正せず,Jsonシーケンス化を行う場合のみString形式でシーケンス化する:この方式では元のコードを修正する必要はない.a.SpringBootのフィールドJsonシーケンス化方式を使用する:
	@JsonSerialize(using = ToStringSerializer.class)
    private Long skuId;

自分で使っているのはこれです.b.FastJsonを用いたフィールドJsonシーケンス化方式