码迷,mamicode.com
首页 > 编程语言 > 详细

记一次 springboot 参数解析 bug调试 HandlerMethodArgumentResolver

时间:2019-12-20 20:28:35      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:web   contain   经验   解析   ati   lan   info   init   bug   

情况描述

前端输入框输入中文的横线 —— ,到后台接收时变成了 &madsh;$mdash

技术图片

正常应该显示成这样:
技术图片

bug调试思路记录

最开始完全没有向调试源码方面想,试了不少方法,都没解决,没办法了只能源码跟踪排查问题。
想着那个类是解析参数的?加个断点调试下就清除了,问题是不清楚到底是哪个类。so,search
---
开始
步骤1:搜索一下 : spring 参数解析
结果很多,看了很多博文之后,参考博客地址
发现了 HandlerMethodArgumentResolver
技术图片

这里有两个函数,其中resolveArgument是 负责解析request中的参数,赋给controller

//负责解析request中的参数,赋给controller
Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
            NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception;

步骤2:
HandlerMethodArgumentResolverCompositeresolveArgument处加断点,开始跟踪调试
这里很关键,千头万绪从这里开始,为什么是这里?参考的上边的博文
技术图片

断点跟踪情况:

(1)
技术图片

(2)InvocableHandlerMethod
技术图片

(3)
技术图片

(4)
技术图片

(5)
技术图片

(6)
技术图片

(7)
技术图片

(8)
技术图片

(9)
技术图片

我们关注的是remark中的——,F6执行for循环,直接到remark

(10)
技术图片

(11)
技术图片

(12) 这一步,参数发生变化
技术图片

技术图片

技术图片

(13)
技术图片

(14)
技术图片

(15)
技术图片

(16)
技术图片

以上步骤是最后总结出来的,第一遍调试不知道参数到哪里发生变化了,所以还有很多方法F5进入看了看,
跟着断点一个方法一个方的过,最后发现在执行完这个方法后,原来的——变为了 &madsh

convertedValue = doConvertValue(oldValue, convertedValue, requiredType, editor);

总结

这个bug花了一上午才找出原因...
首先是刚刚接手对项目不熟悉,不知道BaseController中有 initBinder配置
再者也是不知从何入手调试,源码调试经验不足
---
花里胡哨各种搜索,试了n多方法,最后才知道谁才是爹

记一次 springboot 参数解析 bug调试 HandlerMethodArgumentResolver

标签:web   contain   经验   解析   ati   lan   info   init   bug   

原文地址:https://www.cnblogs.com/JQKA/p/12073444.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!