fastjson解析异常 autoType is not support

fastjson解析异常 autoType is not support

异常信息:

com.alibaba.fastjson.JSONException: autoType is not support. me.chanjar.weixin.mp.bean.result.WxMpUser
	at com.alibaba.fastjson.parser.ParserConfig.checkAutoType(ParserConfig.java:1026) ~[fastjson-1.2.47.jar:na]
	at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:316) ~[fastjson-1.2.47.jar:na]
	at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1356) ~[fastjson-1.2.47.jar:na]
	at com.alibaba.fastjson.parser.deserializer.JavaObjectDeserializer.deserialze(JavaObjectDeserializer.java:45) ~[fastjson-1.2.47.jar:na]
	at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:661) ~[fastjson-1.2.47.jar:na]
	at com.alibaba.fastjson.JSON.parseObject(JSON.java:365) ~[fastjson-1.2.47.jar:na]
	at com.alibaba.fastjson.JSON.parseObject(JSON.java:269) ~[fastjson-1.2.47.jar:na]
	at com.alibaba.fastjson.JSON.parseObject(JSON.java:488) ~[fastjson-1.2.47.jar:na]
	
    省略。。。。

原因就是使用fastjson的时候:序列化时将class信息写入,反解析的时候,fastjson默认情况下会开启autoType的检查,相当于一个白名单检查吧,如果序列化信息中的类路径不在autoType中,反解析就会报上面的com.alibaba.fastjson.JSONException: autoType is not support的异常。

解决方案:

参考 https://github.com/alibaba/fastjson/wiki/enable_autotype 讲解了3种方式添加autoType的白名单:

1、在代码中配置,如果有多个包名前缀,分多次addAccept
ParserConfig.getGlobalInstance().addAccept("com.taobao.pac.client.sdk.dataobject."); 

2、加上JVM启动参数,如果有多个包名前缀,用逗号隔开
-Dfastjson.parser.autoTypeAccept=com.taobao.pac.client.sdk.dataobject.,com.cainiao. 

3、通过fastjson.properties文件配置
在1.2.25/1.2.26版本支持通过类路径的fastjson.properties文件来配置,配置方式如下:
fastjson.parser.autoTypeAccept=com.taobao.pac.client.sdk.dataobject.,com.cainiao. // 如果有多个包名前缀,用逗号隔开

//亲测可用,这是我的解决方案
fastjson.parser.autoTypeAccept=me.chanjar.weixin.mp.bean.,cn.pconline.pcloud. // 如果有多个包名前缀,用逗号隔开

如果通过配置白名单解决不了问题,可以选择继续打开autotype功能,fastjson在新版本中内置了多重防护,但是还是可能会存在一定风险。两种方法打开autotype,二选一,如下:

1、JVM启动参数
-Dfastjson.parser.autoTypeSupport=true
2、代码中设置
ParserConfig.getGlobalInstance().setAutoTypeSupport(true); 
如果有使用非全局ParserConfig则用另外调用setAutoTypeSupport(true);

参考文档:

https://blog.csdn.net/u012240455/article/details/80538540

原文地址:https://www.cnblogs.com/cnsyear/p/12732069.html