完整報錯信息如下:
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。替換后問題解決。
