Jiang Shan
Jiang Shan
可以在步骤二、步骤三中间清理一下`HolderVO`反序列化器的缓存,因为你这里`s`和`upCaseS1 `生成的`HolderVO反序列化器`不一样,导致问题 ``` //步骤二 使用配置后 HolderVOTest holderVO1 = JSON.parseObject(upCaseS1, HolderVOTest.class, JSONReader.Feature.SupportSmartMatch); System.out.println(holderVO1); JSONFactory.getDefaultObjectReaderProvider().cleanup(HolderVOTest.class); // 加上这条,清理缓存 //步骤三,解析出错 JSONArray data = JSONArray.parseArray(s); List javaList = data.toJavaList(HolderVOTest.class); System.out.println(javaList); ```
是这样的,框架底层使用 asm 创建反序列化器时(同时开启了 SupportSmartMatch)处理机制不太完善: - 步骤一中,为 HolderVOTest 创建反序列化器并放入了全局缓存,此时解析器知道 manager 字段的值是一个内嵌JSON的字符串; - 步骤二,启用 SmartMatch 时,修改了缓存的解析器实例,把处理 manager 字段的逻辑改成了期望一个JSON对象; - 然后步骤三,仍然使用上述缓存的解析器,它期待 manager 是一个 JSON 对象,结果是 " 开头的字符串,所以报错。 这里修复的话,可能较麻烦,您可以①暂时在应用启动时使用 -Dfastjson2.creator=reflect 来避开上述问题(经测试无问题);②确保两个 manager 的类型一致。
一般情况下,开启 `SupportSmartMatch` 后只是追加了智能匹配的功能,并不影响 `非SmartMatch` 的功能。但是这里情况比较特殊
你好,这个是早期版本的 bug,请升级最新版本试试
目前未支持对jackson、gson注解更细粒度的控制,仅支持全局。
[BUG]反序列化为JSONobject存在$ref引用,使用SerializerFeature.DisableCircularReferenceDetect会存在循环引用,栈溢出问题,生产环境不适用
能提供一下复现问题的测试用例吗?
[BUG]反序列化为JSONobject存在$ref引用,使用SerializerFeature.DisableCircularReferenceDetect会存在循环引用,栈溢出问题,生产环境不适用
您使用的是兼容包吗?SerializerFeature 是fastjson1.x的组件
[BUG]反序列化为JSONobject存在$ref引用,使用SerializerFeature.DisableCircularReferenceDetect会存在循环引用,栈溢出问题,生产环境不适用
> > 您使用的是兼容包吗?SerializerFeature 是fastjson1.x的组件 > > 提单的位置放错了。使用的fastjson1.x。 1.x 现在已经停止维护了,可以尝试使用兼容包,或升级为2.x(或者尝试使用1.x的最后版本1.2.83)
可以帮忙验证下 2.0.58 版本吗?
麻烦给一下能复现问题的代码,以及出问题的服务器OS版本、jdk版本、Fastjson2版本