我知道有很多例子可以多次读取请求正文,我已经经历了很多,但找不到解决我的问题的方法。
所以,就我而言,我有一个 spring-boot 项目,它将文件上传到 Amazon s3。我想读取我在 servlet-filter 中上传的任何文件的请求正文。
我尝试了以下包装
a)对于第一个和第二个,如果是多部分/表单数据,我会得到空请求正文。
b) 对于第二个,如果我调用
requestWrapper.getParameterMap()
进行缓存,我仍然得到空的请求正文。
c)对于第一个,如果我调用
requestWrapper.getParameterMap()
进行缓存,我会得到请求正文,但请求不会执行并导致错误请求。
以下是例外情况:
Resolved [org.springframework.web.multipart.support.MissingServletRequestPartException: Required request part 'file' is not present]
d)对于第三种情况,在多部分/表单数据的情况下,我也会得到与上述相同的异常,通常它工作正常(如果有其他请求)。
编辑:我也浏览了BalusC文章(1)和(2),但得到了同样的异常。 我发现我必须在自定义 requestWrapper 中实现我自己的
getPart(String part)
和 getPart()
才能处理这个多部分/表单数据请求。
我没有找到 getParts()
和 getPart(String part)
的任何参考实现。
我被困住了,请帮忙!!!
如果您使用的是 Spring Boot 2.2 或以上版本。那么这个问题就来了。其实他们已经禁用了
HttpHiddenMethodFilter 默认禁用处理 _method 请求参数的过滤器现在默认禁用,因为如果请求正文可能包含参数,它会导致请求正文过早被消耗。这可以通过设置
来恢复spring.webflux.hiddenmethod.filter.enabled
或
spring.mvc.hiddenmethod.filter.enabled
为真。
因此添加任何这些道具都可以工作
#spring.webflux.hiddenmethod.filter.enabled=true
spring.mvc.hiddenmethod.filter.enabled=true