当前位置: 首页 > news >正文

堆栈溢出 StackOverflowError 排查

报错: ex=Handler dispatch failed; nested exception is java.lang.StackOverflowError
org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.StackOverflowError
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1087) ~[spring-webmvc-5.3.34.jar:5.3.34]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) ~[spring-webmvc-5.3.34.jar:5.3.34]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.34.jar:5.3.34]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.34.jar:5.3.34]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:497) ~[jakarta.servlet-api-4.0.4.jar:4.0.4]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.34.jar:5.3.34]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:584) ~[jakarta.servlet-api-4.0.4.jar:4.0.4]

只看上述报错,看不出来原因,很迷茫,看报错的最后部分

at cn.hutool.json.JSONObject.set(JSONObject.java:393) ~[hutool-all-5.8.26.jar!/:5.8.26]
at cn.hutool.json.JSONObject.set(JSONObject.java:352) ~[hutool-all-5.8.26.jar!/:5.8.26]
at cn.hutool.json.JSONObject.put(JSONObject.java:340) ~[hutool-all-5.8.26.jar!/:5.8.26]
at cn.hutool.json.JSONObject.put(JSONObject.java:32) ~[hutool-all-5.8.26.jar!/:5.8.26]
at cn.hutool.core.bean.copier.BeanToMapCopier.lambda$copy$0(BeanToMapCopier.java:82) ~[hutool-all-5.8.26.jar!/:5.8.26]
at java.util.LinkedHashMap.forEach(LinkedHashMap.java:684) ~[na:1.8.0_412]
at cn.hutool.core.bean.copier.BeanToMapCopier.copy(BeanToMapCopier.java:48) ~[hutool-all-5.8.26.jar!/:5.8.26]
at cn.hutool.core.bean.copier.BeanToMapCopier.copy(BeanToMapCopier.java:16) ~[hutool-all-5.8.26.jar!/:5.8.26]
at cn.hutool.core.bean.copier.BeanCopier.copy(BeanCopier.java:92) ~[hutool-all-5.8.26.jar!/:5.8.26]
at cn.hutool.core.bean.BeanUtil.beanToMap(BeanUtil.java:725) ~[hutool-all-5.8.26.jar!/:5.8.26]
at cn.hutool.json.ObjectMapper.mapFromBean(ObjectMapper.java:264) ~[hutool-all-5.8.26.jar!/:5.8.26]
at cn.hutool.json.ObjectMapper.map(ObjectMapper.java:114) ~[hutool-all-5.8.26.jar!/:5.8.26]

是hutool工具的转换报错,检查代码

    private void getBodyParam(Object arg, Map<String, Object> returnMap) {Map<String, Object> paramMap = new HashMap<>();boolean isJson = false;try {paramMap = JSONUtil.toBean(JSONUtil.toJsonStr(arg), Map.class);isJson = true;} catch (Exception e) {log.debug("非json格式");}

转换 Object arg 到 Map<String, Object> paramMap 时,使用 JSONUtil.toBean 导致的循环溢出

解决方案:寻找更有的 json 转换工具

     private void getBodyParam(Object arg, Map<String, Object> returnMap) {Map<String, Object> paramMap = new HashMap<>();boolean isJson = false;try {ObjectMapper mapper = new ObjectMapper();mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);String jsonStr = mapper.writeValueAsString(arg);paramMap = mapper.readValue(jsonStr, new TypeReference<Map<String, Object>>() {});isJson = true;} catch (Exception e) {log.debug("非json格式");}

http://www.mrgr.cn/news/99308.html

相关文章:

  • 辛格迪客户案例 | 浙江高跖医药委托生产质量管理协同(OWL MAH)项目
  • vue3 + element-plus中el-dialog对话框滚动条回到顶部
  • 存储器综合:内存条
  • [SpringBoot]配置文件(1)
  • 查看matlab函数帮助文档的方法
  • 嵌入式工程师( C / C++ )笔试面试题汇总
  • Python常用的第三方模块之二【openpyxl库】读写Excel文件
  • 前端笔记-Vue3(上)
  • Linux学习笔记|入门指令
  • Linux:权限相关问题
  • Linux 入门十一:Linux 网络编程
  • 辛格迪客户案例 | 上海科济药业细胞治疗生产及追溯项目(CGT)
  • 3200温控板电路解析
  • 推荐系统/业务,相关知识/概念1
  • 【Maven】项目管理工具
  • 诱骗协议芯片支持PD2.0/3.0/3.1/PPS协议,支持使用一个Type-C与电脑传输数据和快充取电功能
  • 无需花钱购买域名服务器!使用 VuePress + Github 30分钟搭建属于自己的博客网站(保姆级教程)
  • 在Ubuntu 18.04下编译OpenJDK 11
  • Emacs入门篇2:安装evil插件以便vi老用户可以使用VI快捷键来快速使用Emacs
  • 【go】什么是Go语言中的GC,作用是什么?调优,sync.Pool优化,逃逸分析演示