当前位置: 首页 > 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格式");}

相关文章:

  • Java反射机制深度解析与应用案例
  • android编译使用共享缓存
  • 常见算法题
  • 【k8s系列1】一主两从结构的环境准备
  • 51单片机实验五:A/D和D/A转换
  • 江湖路远,唯PUT可稳:Express 路由更新招式全解
  • 嵌入式C语言位操作的几种常见用法
  • 视频编解码种类/技术/区别/优缺点汇总
  • 多模态记忆融合:基于LSTM的连续场景生成——突破AI视频生成长度限制
  • 【Qt】初识Qt(二)
  • Oracle 11g通过dg4odbc配置dblink连接PostgreSQL
  • 2021-11-09 C++倍数11各位和为13
  • 25MathorCup选题浅析(睡醒扫一眼题目版)
  • C++程序设计基础实验:C++对C的扩展特性与应用
  • 免费将静态网站部署到服务器方法(仅支持HTML,CSS,JS)
  • 混合精度(Mixed Precision)在科学计算领域应用
  • HAL详解
  • 优化自旋锁的实现
  • npx 的作用以及延伸知识(.bin目录,npm run xx 执行)
  • 大语言模型减少幻觉的常见方案
  • 中保协:当前普通型人身保险产品预定利率研究值为2.13%
  • 青海玉树州杂多县发生4.6级地震,震源深度10千米
  • 以优良作风激发改革发展动力活力,中管企业扎实开展深入贯彻中央八项规定精神学习教育
  • 画廊主韦尔:是喜是伤的一生
  • 尹锡悦涉嫌发动内乱案第二次庭审21日举行,媒体获准拍摄
  • 东北三省,十年少了一个“哈尔滨”