Long 返回给前台 js中丢失精度

博客主要讲述Java开发中前后端ID传输的问题。后台用雪花算法生成long类型ID,返回前台时JS接收出现精度丢失。在MyBatis Plus中使用注解处理,用@JsonSerialize序列化给前台,发现@JsonDeserialize可实现反向序列化,但未找到其可直接使用的class。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现象

1.后台id等使用long(雪花算法生成id)存储
2.后台将id返回给前台
3.js接收id,发现精度丢失。数字末尾变成了00

说明

在mybatis plus中使用了雪花算法生成id,MP也提供了解决思路,点我跳转

解决办法

我使用了注解处理

@JsonSerialize(using=ToStringSerializer.class)
private Long id;

那么问题来了。我给前台传输的id是String类型,那前台传输给后台的时候也会是String。类型对不上怎么办?

我寻思着既然@JsonSerialize可以序列化(Getter)给前台,有没有注解提供了反向序列化(Setter)的方法呢?

翻了一下,发现@JsonDeserialize可以实现

@JsonSerialize(using=ToStringSerializer.class)
@JsonDeserialize(using = ToLongDeserializer.class)
private Long id;
public class ToLongDeserializer extends JsonDeserializer<Long> {

	@Override
	public Long deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
		String value = jsonParser.getText();
		try {
			return value == null ? null : Long.parseLong(value);
		} catch (NumberFormatException e) {
			return null;
		}
	}

}

结尾

我没找到@JsonDeserialize可以直接使用的class,如果有请留言给我谢谢

你好!关于QJsonObject存储long long类型丢失精度的问题,我可以为你提供一些建议。 在Qt中,QJsonObject是用来存储JSON对象的类。然而,QJsonObject的value函数返回的是QJsonValue类型,它只能存储一些基本数据类型,如字符串、整数、浮点数等,并不支持long long类型。 如果你需要存储long long类型的数据并保持精度,可以考虑以下两种方法: 1. 将long long类型转换为字符串进行存储:你可以使用QString::number()函数将long long类型转换为字符串,然后将其作为QJsonValue存储在QJsonObject中。在需要使用该时,可以使用QString::toLongLong()函数将其还原为long long类型。 示例代码如下: ```cpp QJsonObject jsonObject; long long value = 1234567890123456789LL; jsonObject["key"] = QString::number(value); // 从QJsonObject中获取存储的 QString stringValue = jsonObject["key"].toString(); long long restoredValue = stringValue.toLongLong(); ``` 2. 自定义数据类型:如果你需要频繁地存储和读取long long类型的数据,可以考虑创建一个自定义的数据类型,将其转换为可序列化的形式,并在需要时进行反序列化。 示例代码如下: ```cpp struct LongLongData { qint64 value; // 序列化 QJsonObject toJson() const { QJsonObject json; json["value"] = QString::number(value); return json; } // 反序列化 static LongLongData fromJson(const QJsonObject& json) { LongLongData data; data.value = json["value"].toString().toLongLong(); return data; } }; // 使用自定义数据类型 QJsonObject jsonObject; LongLongData data; data.value = 1234567890123456789LL; jsonObject["key"] = data.toJson(); // 从QJsonObject中获取存储的 LongLongData restoredData = LongLongData::fromJson(jsonObject["key"].toObject()); long long restoredValue = restoredData.value; ``` 希望这些方法能够帮助到你!如果你还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值