getReader与getInputStream()
时间: 2023-03-26 21:03:24 浏览: 126
这两个方法都是用来读取输入流的,但是它们的返回类型不同。getReader() 返回一个 Reader 对象,而 getInputStream() 返回一个 InputStream 对象。如果要读取文本数据,应该使用 getReader() 方法;如果要读取二进制数据,应该使用 getInputStream() 方法。
相关问题
getReader() can t be called after getInputStream()
问题中提到了在拦截器或者过滤器中通过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 ]
@PostMapping("/import") public Result imp(MultipartFile file) throws Exception { InputStream inputStream = file.getInputStream(); ExcelReader reader = ExcelUtil.getReader(inputStream); // 通过 javabean的方式读取Excel内的对象,但是要求表头必须是英文,跟javabean的属性要对应起来 List<Notice> list = reader.readAll(Notice.class); noticeService.saveBatch(list); return Result.success(); }
这是一个使用SpringBoot框架编写的控制器方法,用于从上传的Excel文件中读取数据并存储到数据库中。具体实现的步骤如下:
1. 通过注解 @PostMapping("/import") 将该方法映射到一个URL地址,当客户端发送一个POST请求到该URL时,该方法会被调用。
2. 该方法的参数 MultipartFile file 表示从客户端上传的文件,使用 Spring 的 MultipartFile 可以方便地处理文件上传功能。
3. 通过 MultipartFile 的 getInputStream() 方法获取上传文件的输入流,并创建一个 ExcelReader 对象来读取 Excel 文件。
4. 使用 ExcelReader 的 readAll() 方法将整个 Excel 文件中的数据读取出来,并转换成指定的 JavaBean 类型。在这里,指定的 JavaBean 类型是 Notice.class,表示读取的数据会被转换成 Notice 类型的对象列表。
5. 最后,调用 noticeService 的 saveBatch() 方法将读取出来的 Notice 对象列表批量保存到数据库中。
6. 方法返回一个 Result 对象,表示操作执行的结果。在这里,返回一个成功的 Result 对象。
阅读全文