@wenshao 请问:是否有一种方式可以在反序列化时把所有Long类型使用String代替
我现在遇到当整型值超过一定范围 (value > 9007199254740991L || value < -9007199254740991L)
时前端 JavaScript
丢失精度的问题,解决方法是把服务端所有 Long
类型都序列化为字符串返回
我实现了 ValueFilter
接口,对象的属性直接是 Long
型时没问题,但当对象属性是集合类型,比如 List<Long>
或 Set<Long>
时里面的 Long
还是序列化为数值类型。
我实现的代码如下:
val valueFilter = ValueFilter { _, _, value ->
when (value) {
is Long -> value.toString()
is Date -> value.time
else -> value
}
}
val messageConverter = FastJsonHttpMessageConverter()
val config = FastJsonConfig()
config.setSerializeFilters(valueFilter)
messageConverter.fastJsonConfig = config
3条答案
按热度按时间ndasle7k1#
序列化的时候,使用SerializerFeature.BrowserCompatible时,会将(i > 9007199254740991L || i < -9007199254740991L)做为字符串处理。
yr9zkbsy2#
简单的开启浏览器兼容特性,也有问题比如:
long[] longs = {442447732740L, 94140442447732736L};
String json = JSON.toJSONString(longs, SerializerFeature.BrowserCompatible);
得到的json串为 [442447732740,"94140442447732736"]。有没有更加统一的方式
qyswt5oh3#
同求这个问题 解决方案