fastjson jrebel修改后调用toString方法报错问题

eoigrqb6  于 5个月前  发布在  其他
关注(0)|答案(5)|浏览(56)

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

jgovgodb

jgovgodb1#

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

xu3bshqb

xu3bshqb2#

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

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

tv6aics1

tv6aics13#

可以的,方法如下:

@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的缓存无法刷新问题

x6h2sr28

x6h2sr284#

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

hzbexzde

hzbexzde5#

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

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

相关问题