栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Spring Boot中到达控制器之前修改请求主体

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Spring Boot中到达控制器之前修改请求主体

简短答案
是,但不容易。

详细信息,
我知道在请求到达控制器中的处理程序方法之前,可以更改请求主体的三个选项。

  1. 在调用方法之前,请使用AOP更改请求。
  2. 创建一个HTTP过滤器。
  3. 创建一个自定义的Spring HandlerInterceptor。

由于您已经在使用spring-boot,因此选项3(自定义Spring HandlerInterceptor)对您来说似乎是最佳选择。

这里是指向Baeldung文章的链接,该文章涵盖了springHandlerInterceptors。

Baeldung文章不是您问题的完整答案,因为您只能一次阅读

InputStrem
返回的内容
HttpServletRequest

您将需要创建一个包装器类,以扩展

HttpServletRequest

和包装您的包装器类中的每个请求,这些包装器类位于您的自定义HandlerInterceptor或自定义的Filter(过滤器可能是这里的方法)中。

包装类

  1. HttpServletRequest
    在包装器类构造函数中读取InputStream
  2. 根据您的要求修改车身。
  3. 将修改后的主体写入
    ByteArrayOutputStream
  4. 用于从流中
    toByteArray
    检索实际值
    byte[]
  5. 关闭ByteArrayOutputStream(try-with-resources对此很有用)。
  6. 覆盖
    getInputStream
    方法。
  7. byte[]
    每次
    getInputStream
    调用时,将包裹在ByteArrayInputStream中。返回此流。

如何包装请求

  1. 在您的Filter中,实例化包装器类并传递原始请求(这是doFilter方法的参数)。
  2. 将包装传递给chain.doFilter方法(不是原始请求)。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/670645.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号