读取了Request输入流,请求数据就不见了
HttpServletRequest 和 HttpServletResponse 中存在方法互斥。
在过滤器、拦截器中对 HTTP 请求中的数据做校验、审计是非常常见的需求
Request 输入流数据一但被读取,Controller找不到了
Request 的 getlnputStream 和 getReader 都只能使用一次

请求数据解析工具:



定义拦截器:



发起请求:

Request的 getlnputStream、 getReader、 getParameter 方法互斥,也就是使用了其中一个,再使用另外的两个,是获取不到数据的。
Response 也是一样的,与 Request 几乎是一样的
互斥效果的原理:


getParameter 内部也会判断:

无法重复读取的原理
读取完坐标没有重置:
getReader 也是没有重置坐标

HttpServletRequestWrapper + Filter 解决输入流不能重复读取问题
其实是包装器模式,实现对请求数据的包装。
自定义请求包装器:

每次获取数据的时候都是重新从数组里面获取


这个方法直接调用上面重写的 getInputStream ,相当于也是每次从数组里面重新获取:

定义过滤器:
让输入流可以重复读取,在 doFilter 里将对应的 Request 替换为对应的 wrapper


posted on 2025-10-14 23:48 chuchengzhi 阅读(7) 评论(0) 收藏 举报
浙公网安备 33010602011771号