getInputStream() has already been called for this request

背景

请求的ContentType为:

Content-Type: multipart/form-data;

在执行以下代码时报错:

request.getReader();

详细错误:

getInputStream() has already been called for this request

问题原因

Spring预先读取并处理了multipart的内容,并将其封装为MultipartHttpServletRequest,如果再次通过request获取流就会抛错

解决方案

通过Spring的封装类获取文件流:

MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;