网站版建设,软件开发培训班有哪些,订阅号怎么做网站,网站seo优化服务#x1f49d;#x1f49d;#x1f49d;欢迎来到我的博客#xff0c;很高兴能够在这里和您见面#xff01;希望您在这里可以感受到一份轻松愉快的氛围#xff0c;不仅可以获得有趣的内容和知识#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学… 欢迎来到我的博客很高兴能够在这里和您见面希望您在这里可以感受到一份轻松愉快的氛围不仅可以获得有趣的内容和知识也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂 非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。 ✨✨ 欢迎订阅本专栏 ✨✨ 博客目录 一.现象复原1.还原现场2.debug 截图3.Post 请求参数 二.排查过程1.可能得情况2.字段解析错误3.InitBinder 注解4.HttpServletRequestWrapper 拦截器 一.现象复原
1.还原现场
post 请求参数 detail 里有 15 条 断点看就只有 7 条了 丢了中间的 6-14 条数据 有什么好的排查方案吗
2.debug 截图
debug 截图只有 7 条 3.Post 请求参数
post 请求的实际参数有 15 条 二.排查过程
1.可能得情况
InitBinder 注解有没有 HttpServletRequestWrapper 拦截器以及相关的子类Filter 以及相关的子类WebMvcConfigurer 以及相关的子类HandlerInterceptorAdapter 以及相关的子类
2.字段解析错误
排除这个错误,如果是字段解析错误的直接会报错,因为请求的参数多,和实体类不匹配会直接报错,所以这种情况可以直接排除掉。
3.InitBinder 注解
InitBinder 是 Spring MVC 提供的一个注解它用于自定义数据绑定的一些规则或配置。通常它用于注册一些自定义的编辑器Editor或验证器Validator以便在控制器中对请求参数进行预处理。
以下是 InitBinder 注解的一些中文详解 作用 InitBinder 注解主要用于初始化 Web 数据绑定器可以在控制器中对数据绑定进行自定义配置。 位置 通常InitBinder 注解标注在一个控制器类的方法上这个方法可以有任意的名称。在这个方法中你可以注册一些自定义的编辑器或验证器。 方法签名 注解的方法需要返回 void而且需要接受一个 WebDataBinder 类型的参数。 InitBinder
public void initBinder(WebDataBinder binder) {// 在这里进行数据绑定的初始化配置
}WebDataBinder 参数 WebDataBinder 是 Spring MVC 中用于进行数据绑定的核心类它包含了与数据绑定相关的各种方法和配置。 数据编辑器Editor的注册 你可以使用 binder.registerCustomEditor 方法注册自定义的编辑器用于将字符串转换为特定类型的数据。例如将字符串转换为日期类型。 InitBinder
public void initBinder(WebDataBinder binder) {SimpleDateFormat dateFormat new SimpleDateFormat(yyyy-MM-dd);binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
}验证器Validator的注册 通过 binder.addValidators 方法注册自定义的验证器用于在数据绑定之前对数据进行验证。 InitBinder
public void initBinder(WebDataBinder binder) {binder.addValidators(new MyCustomValidator());
}数据预处理 在 InitBinder 方法中你还可以进行一些其他的数据预处理操作例如将字符串中的空格去除或者将特定格式的数据进行处理。 InitBinder
public void initBinder(WebDataBinder binder) {// 进行一些数据预处理的操作
}总体而言InitBinder 提供了一种灵活的机制使得你可以在控制器中对数据绑定的行为进行个性化定制。这对于处理一些特殊的数据转换或验证需求非常有用。
4.HttpServletRequestWrapper 拦截器
HttpServletRequestWrapper 是一个用于包装 HttpServletRequest 的类它允许你在处理请求时对原始的 HttpServletRequest 进行一些修改或增强。这通常在 Servlet 过滤器或拦截器中使用用于对请求进行预处理或者修改请求参数等操作。
下面是一个简单的实例演示了如何使用 HttpServletRequestWrapper 进行拦截器的请求修改
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.IOException;WebFilter(/*)
public class MyFilter implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {// 初始化操作}Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {// 将 ServletRequest 转换为 HttpServletRequestHttpServletRequest httpRequest (HttpServletRequest) request;// 使用 HttpServletRequestWrapper 进行包装MyHttpServletRequestWrapper requestWrapper new MyHttpServletRequestWrapper(httpRequest);// 继续执行过滤器链chain.doFilter(requestWrapper, response);}Overridepublic void destroy() {// 销毁操作}
}然后定义 MyHttpServletRequestWrapper 类继承自 HttpServletRequestWrapper
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;public class MyHttpServletRequestWrapper extends HttpServletRequestWrapper {public MyHttpServletRequestWrapper(HttpServletRequest request) {super(request);}Overridepublic String getParameter(String name) {// 在这里可以对请求参数进行修改或增强String value super.getParameter(name);// 示例将参数值转为大写return (value ! null) ? value.toUpperCase() : null;}// 如果需要对其他方法进行修改可以覆盖相应的方法
}在上述例子中MyHttpServletRequestWrapper 重写了 getParameter 方法在获取请求参数时将参数值转换为大写。你可以根据需要在 MyHttpServletRequestWrapper 中覆盖其他方法以完成各种对请求的修改或增强操作。
注意使用 HttpServletRequestWrapper 需要谨慎确保你了解自己的需求和对请求的修改操作以避免潜在的问题。 觉得有用的话点个赞 呗。 ❤️❤️❤️本人水平有限如有纰漏欢迎各位大佬评论批评指正 如果觉得这篇文对你有帮助的话也请给个点赞、收藏下吧非常感谢! Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧