完整报错信息如下:
nested exception is java.lang.VerifyError: (class: com/alibaba/fastjson/parser/deserializer/FastjsonASMDeserializer_3_TianyanchaMainObject, method: deserialze signature: (Lcom/alibaba/fastjson/parser/DefaultJSONParser;Ljava/lang/reflect/Type;Ljava/lang/Object;I)Ljava/lang/Object;) Illegal target of jump or branch
at org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1260)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:851)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:844)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
本地测试没有问题、部署到生产出现问题。
本地:fastjson版本1.2.6、jdk版本1.7.51
生产:fastjson版本1.2.73(因漏洞问题升级到最新)、jdk版本1.7.45。
网上查询的信息都是fastjson解析的数量问题.Fastjson1.2.28版本下,在json反序列化的时候,当字段数量为32或者64时,会反序列化报错。
实际字段数量是由71升级到75后出现的错误。尝试改到74个还是报错。排除数量问题。
怀疑是fastjson版本问题,不过网上查询说是fastjson1.2.73版本向下兼容5、6、7。尝试把本地升级到1.2.73,果然出错。
maven库中找到打漏洞补丁的低版本1.2.7.sec10。替换后问题解决。