🍊作者简介: 不肯过江东丶,一个来自二线城市的程序员,致力于用“猥琐”办法解决繁琐问题,让复杂的问题变得通俗易懂。
🍊支持作者: 点赞👍、关注💖、留言💌~
最近项目中来了一个新的需求:需要搞一个拦截器,对请求接口时传递过来的参数做一个加密处理。这个需求本身并不难,但是在实现功能的过程中却遇到了一个比较“棘手”的问题…
在拦截器中获取接口参数的时候需要分两种情况:
🍓情况一:接口使用 @RequestParam 接收参数
🍓情况二:接口使用 @RequestBody 接收参数
针对情况一,代码写起来就非常简单了,我们只需要在拦截器中通过request.getParameterMap() 来获得全部 Parameter 参数就可以了;但是当接口使用 @RequestBody 接收参数时,我们在拦截器中使用同样的方法获取参数,就会出现流已关闭的异常,也就导致参数读取失败了😔… 这是因为 Spring 已经对 @RequestBody 提前进行处理,而 HttpServletReqeust 获取输入流时仅允许读取一次,所以会报java.io.IOException: Stream closed。
俗话说“繁琐问题