情况描述

前端输入框输入中文的横线 —— ,到后台接收时变成了 &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)

附XSS攻击介绍博文:XSS攻击

(15)

(16)

以上步骤是最后总结出来的,第一遍调试不知道参数到哪里发生变化了,所以还有很多方法F5进入看了看,

跟着断点一个方法一个方的过,最后发现在执行完这个方法后,原来的——变为了 &madsh

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

总结

这个bug花了一上午才找出原因...

首先是刚刚接手对项目不熟悉,不知道BaseController中有 initBinder配置

再者也是不知从何入手调试,源码调试经验不足

花里胡哨各种搜索,试了n多方法,最后才知道谁才是爹

记一次 springboot 参数解析 bug调试 HandlerMethodArgumentResolver的更多相关文章

  1. 【接口参数解析BUG】SpringMVC接口参数解析

    今天遇到一个BUG,前端传递数字数组时,后端使用字符串类型去接收,结果无法接收到,代码如下 问题: GET请求: 前端: configJsonArray:[1,2] 后端: private Strin ...

  2. spring 自定参数解析器(HandlerMethodArgumentResolver)

    https://blog.csdn.net/u010187242/article/details/73647670

  3. SpringBoot系列教程web篇之如何自定义参数解析器

    title: 190831-SpringBoot系列教程web篇之如何自定义参数解析器 banner: /spring-blog/imgs/190831/logo.jpg tags: 请求参数 cat ...

  4. SpringBoot系列: Java应用程序传参和SpringBoot参数文件

    ===========================向java 程序传参的几种形式:===========================1. 使用 OS 环境变量. 这个不推荐. 2. 使用JVM ...

  5. springMVC源码解析--HandlerMethodArgumentResolverComposite参数解析器集合(二)

    上一篇博客springMVC源码分析--HandlerMethodArgumentResolver参数解析器(一)中我们已经介绍了参数解析相关的东西,并且也提到了HandlerMethodArgume ...

  6. 【问题】【SpringBoot】记一次springboot框架下用jackson解析RequestBody失败的问题

    最近项目中遇到了一个问题,费好大劲才发现问题所在,并且修复了问题,下面分享一下这个问题的定位和修复的新路旅程. 先说下背景:该项目用的是SpringBoot框架,主要功能为对外提供一些Restful ...

  7. SpringBoot系列教程web篇之Post请求参数解析姿势汇总

    作为一个常年提供各种Http接口的后端而言,如何获取请求参数可以说是一项基本技能了,本篇为<190824-SpringBoot系列教程web篇之Get请求参数解析姿势汇总>之后的第二篇,对 ...

  8. SpringBoot系列教程web篇之Get请求参数解析姿势汇总

    一般在开发web应用的时候,如果提供http接口,最常见的http请求方式为GET/POST,我们知道这两种请求方式的一个显著区别是GET请求的参数在url中,而post请求可以不在url中:那么一个 ...

  9. SpringBoot让你的Bean动起来(自定义参数解析HandlerMethodArgumentResolver)

    SpringBoot让你的Bean动起来(自定义参数解析HandlerMethodArgumentResolver) 简介 我们 Controller 用到的一些 Bean 需要通过一定的方式去获取的 ...

随机推荐

  1. vue element 表单多个验证时,滚动到验证提示的位置

    最近项目有个下单的过程,需要输入很多信息,每次提交都要往下滑,还要去验证,测试后发现体验也不好,element框架也没提供这种滚动方法, 不过提供了一个验证的方法 validate (两个参数:是否校 ...

  2. LeetCode 876. Middle of the Linked List(获得链表中心结点)

    题意:获得链表中心结点.当有两个中心结点时,返回第二个. 分析:快慢指针. /** * Definition for singly-linked list. * struct ListNode { * ...

  3. windows通过zip安装mysql5.7.26的一个坑

    需要将my.ini的 红框的/不能写成\ 注意编码格式问题 然后 mysqld --initialize-insecure mysqld --install net start mysql

  4. Linux centosVMware 自动化运维认识自动化运维、启动salt相关服务、saltstack配置认证、salt-key命令用法、saltstack远程执行命令、saltstack - grains、saltstack – pillar

    一.认识自动化运维 传统运维效率低,大多工作人为完成 传统运维工作繁琐,容易出错 传统运维每日重复做相同的事情 传统运维没有标准化流程 传统运维的脚本繁多,不能方便管理 自动化运维就是要解决上面所有问 ...

  5. C++ class with pointer member(s)

    正如标题所示:这篇复习带有指针类型成员的class 设计类 考虑到会有以下操作,来设计类 { String s1(); String s2("hello"); String s3( ...

  6. Redis 的使用

    1. 概念: redis是一款高性能的NOSQL系列的非关系型数据库 1.1.什么是NOSQL NoSQL(NoSQL = Not Only SQL),意即"不仅仅是SQL",是一 ...

  7. 微信红包系统设计 & 优化

    微信红包系统设计 & 优化 浏览次数:151次 腾讯大讲堂 2015年04月02日 字号: 大 中 小 分享到:QQ空间新浪微博腾讯微博人人网豆瓣网开心网更多0   编者按:经过2014年一年 ...

  8. 多进程之multiprocessing模块、守护进程、互斥锁

    目录 1. multiprocessing 模块介绍 2. Process类的介绍 3. Process类的使用 4. 守护进程 5. 进程同步(锁) 1. multiprocessing 模块介绍 ...

  9. Vue中img标签src属性绑定

    最近刚刚完成了自己的毕业设计项目,整理一下过程中遇到的问题吧~~~ 我做的是一个基于Vue的信息资讯展示与管理平台,显示首页.详情页等的文章内容时就涉及到了图片展示,项目初始时我搭建的是静态网页结构, ...

  10. 使用c#调用API入门

    使用C#调用windows API入门 一:入门,直接从 C# 调用 DLL 导出   其实我们的议题应该叫做C#如何直接调用非托管代码,通常有2种方法: 1.  直接调用从 DLL 导出的函数. 2 ...