Jiang Shan

Results 68 comments of 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,请升级最新版本试试

> > 您使用的是兼容包吗?SerializerFeature 是fastjson1.x的组件 > > 提单的位置放错了。使用的fastjson1.x。 1.x 现在已经停止维护了,可以尝试使用兼容包,或升级为2.x(或者尝试使用1.x的最后版本1.2.83)

麻烦给一下能复现问题的代码,以及出问题的服务器OS版本、jdk版本、Fastjson2版本