Spring注解@RequestBody是如何获取到数据的?

背景:最近在写SpringBoot与微信小程序,微信小程序有一个关于自建Session的问题,需要我在json数据中方一个3rd_session_key来作为用户的session信息,所以我需要在用户登录后的每一条json数据中加上这个3rd_session_key的参数。于是我准备用过滤器来filter来实现。

在实现这个逻辑的过程中,遇到了一些问题。

首先,我是实现了 javax.servlet.Filter 接口,
然后在 doFilter() 方法中通过传入 ServletRequest 对象来获取传入的json数据,具体我就不做展示了。

此时就遇到了一个问题,在过滤器filter中获取到json数据以后,我的controller就拿不到数据了。后面经过一番Google找到了解决方案,就是重写了HttpServletRequestWrapper的getInputStream() 方法。

我的问题是在Spring中 @RequestBody 是如何实现拿到前端传回来的json数据的呢?

我有尝试查看这个 getInputStream() 方法的源码,但是我卡在了 ServletRequest 这个接口的 public ServletInputStream getInputStream() throws IOException 方法,我还不知道怎么找接口方法的具体实现。

感谢。

阅读 13.4k
2 个回答

恩. @requestbody 就是把HttpServletRequest的输入(request.getInputStream())通过json,转换成一个对象.
在spring中是RequestResponseBodyMethodProcessor利用HttpMessageConventer做的.

另外,可以不用这个注解, 直接将字符串转json, 往json里面添加.

会不会是楼主在filter中使用request.getInputStream();
这样你在filter中就把这个流的内容读取了
在controller中再次读取这个流就读不到数据了.
同一个流不能被读取2次哇

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题