fastjson 是否有一种方式可以在反序列化时把所有Long类型使用String代替

jutyujz0  于 4个月前  发布在  其他
关注(0)|答案(3)|浏览(50)

@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
ndasle7k

ndasle7k1#

序列化的时候,使用SerializerFeature.BrowserCompatible时,会将(i > 9007199254740991L || i < -9007199254740991L)做为字符串处理。

String json = JSON.toJSONString(obj, SerializerFeature.BrowserCompatible);
yr9zkbsy

yr9zkbsy2#

简单的开启浏览器兼容特性,也有问题比如:
long[] longs = {442447732740L, 94140442447732736L};
String json = JSON.toJSONString(longs, SerializerFeature.BrowserCompatible);
得到的json串为 [442447732740,"94140442447732736"]。有没有更加统一的方式

qyswt5oh

qyswt5oh3#

同求这个问题 解决方案

相关问题