[alibaba/fastjson]jrebel修改后调用toString方法报错问题

2025-10-31 477 views
8

通过AOP拦截方法参数,在参数增加字段以及get,set后,增加的参数是List集合,调用JSON.toString方法会报找不到get方法。 目前有解决办法吗?

回答

9

这是因为fastjson对序列化器做了缓存,你参数改变后它还是调用之前的序列化器

5

这是因为fastjson对序列化器做了缓存,你参数改变后它还是调用之前的序列化器,暂时找不到解决方案;你可以用jackson替代

能够禁用缓存达到刷新的效果吗?

0

可以的,方法如下:

@RestController
@RequestMapping("/api")
public class SystemController {
    @ApiOperation(value = "开发时清除缓存", notes = "用于开发使用JRebel时清除FastJson的对象解析Cache")
    @RequestMapping(value = "/clearCache", method = RequestMethod.GET)
    public String clearCache() {
        SerializeConfig.getGlobalInstance().clearSerializers();
        ParserConfig.getGlobalInstance().clearDeserializers();
        return "";
    }
}

调用该方法即可清除缓存。 可以参见我的博文:解决JRebel进行代码热加载时FastJson的JsonField的缓存无法刷新问题

8

有没有大神写一个拦截器,,这样每次调接口清除好麻烦呀

5

这是因为fastjson对序列化器做了缓存,你参数改变后它还是调用之前的序列化器,暂时找不到解决方案;你可以用jackson替代

能够禁用缓存达到刷新的效果吗? 可以在开发环境,禁用ASM SerializeConfig.getGlobalInstance().setAsmEnable(false);