【问题标题】:@RequestBody after reading input stream in inteceptor在拦截器中读取输入流后@RequestBody
【发布时间】:2016-12-20 17:43:39
【问题描述】:

我正在尝试让 Spring 使用 @RequestBody 注释将请求正文映射到 POJO。

我收到一个错误

“所需的请求正文内容缺失:org.springframework.web.method.HandlerMethod$HandlerMethodParameter@4c3bfe22

因为我之前已经根据来自拦截器的请求调用了 getInputStream 进行验证。

我已经扩展了 HttpServletRequestWrapper 并重写了 getInputStream 方法以返回一个 ServletInputStream,它从在原始读取时创建的字符串缓存中获取数据。

调试时,我可以在拦截器中多次调用 getInputStream,但 Spring 仍然无法映射 POJO。当我注释掉原来在inteceptor中读入body的那行代码,Spring就可以很好的映射POJO了。

我不太清楚 Spring 如何将数据映射到 POJO,我错过了什么吗?

谢谢

【问题讨论】:

  • 显示您的代码!听起来好像缺少一些代码语句。
  • 您是在过滤器中还是在拦截器中使用 HttpServletRequestWrapper 进行装饰?
  • @KlausGroenbaek 谢谢,我是在拦截器中执行此操作的,但在您发表评论后,我检查并意识到我需要在过滤器中执行此操作。

标签: spring spring-mvc


【解决方案1】:

在 Klaus 关于过滤器与拦截器的评论后,我解决了这个问题。

对于其他发现此问题的人,您只能通过过滤器而不是拦截器来执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-03
    • 2017-03-20
    • 2014-12-31
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    相关资源
    最近更新 更多