【发布时间】:2021-01-24 16:15:13
【问题描述】:
我正在尝试拦截所有传入的 HTTP 请求并在我的 Spring MVC(不是 Spring Boot)应用程序中处理附加到这些请求的主体。为了实现这个“入站拦截器”,我使用了 Spring 的 HandlerInterceptor 接口。一旦请求被拦截,我将尝试按如下方式检索正文:
ContentCachingRequestWrapper requestWrapper = new ContentCachingRequestWrapper(request);
Map<String, String[]> params = requestWrapper.getParameterMap();
byte[] body = requestWrapper.getContentAsByteArray();
参考这个article,尝试这种方式提取body的局限性是:
- 请求的内容类型必须是
x-www-form-urlencoded - 方法类型必须是
POST
对于我正在构建的应用程序,我无法强制执行这些约束中的任何一个,因为调用来自我无法控制的异构来源。是否有某种方法可以覆盖此行为以允许提取默认情况下不支持的请求的正文?或者,是否有另一种方法来执行此任务?
附:我正在对身体进行日志记录+一些自定义处理。所以this answer中提到的解决方案并没有太大帮助
【问题讨论】:
-
“处理”是什么意思?你想在 Spring MVC 处理这个改变的 body 之前改变 body 吗?
-
@SvenDöring 身体没有变化。我有几个正在尝试使用的自定义日志记录类。
标签: java spring spring-mvc servlets