getReader() can t be called after getInputStream()
时间: 2023-12-27 09:39:13 浏览: 122
Servlet的应用实例.pdf
问题中提到了在拦截器或者过滤器中通过getInputStream()读取参数后,在Controller中无法重复读取,会抛出异常。这是因为在HttpServletRequest对象中,getInputStream()和getReader()方法是互斥的,只能调用其中一个来读取请求体的内容。如果在拦截器或过滤器中已经调用了getInputStream()方法读取了参数,那么在Controller中就不能再调用getReader()方法来读取参数,否则会抛出异常。\[1\]
为了解决这个问题,可以在拦截器或过滤器中将请求体的内容保存下来,然后在Controller中直接使用保存的内容来处理。可以使用RequestReadUtils类中的read方法来读取请求体的内容并保存起来,然后在Controller中使用保存的内容来处理。\[3\]
另外,如果请求的Content-Type是application/json,可以使用getReader()方法来获取参数;如果是multipart/form-data,可以直接使用request.getParameter方法来获取参数。\[2\]
#### 引用[.reference_title]
- *1* [解决HttpServletRequest 流数据不可重复读](https://blog.csdn.net/thulium_kyg/article/details/120004808)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* *3* [异常处理:getReader()/getInputStream() has already been called for this request](https://blog.csdn.net/qq_39517116/article/details/116715835)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文