請求流和響應流
一: 使用響應流進行響應文件(數據,圖片都可以)
@GetMapping("/test")
public void getRequestMap(HttpServletRequest request, HttpServletResponse response) throws Exception {
//獲取響應流
ServletOutputStream os = response.getOutputStream();
//重置響應頭
response.reset();
//設置響應頭 Content-Disposition 的作用:當Content-Type 的類型爲要下載的類型時 , 這個信息頭會告訴瀏覽器這個文件的名字和類型
response.setHeader("Content-disposition","attachment; filename="+"my"+".jpg");
//讀取本地圖片
BufferedInputStream is = new BufferedInputStream(new FileInputStream(new File("F:\\美圖\\4.jpg")));
byte[] bytes = new byte[1024];
int len = 0;
while ((len = is.read(bytes)) != -1) {
os.write(bytes,0,len);
}
is.close();
os.close();
}
二: 使用請求流進行獲取POST
請求數據
(一般用於讀取json
請求的json
數據最好)
@PostMapping("/test")
public Map getRequestMap(HttpServletRequest request) throws Exception {
// BufferedReader is = request.getReader();
StringBuilder builder = new StringBuilder();
byte[] bytes = new byte[1024*2];
int len = 0;
ServletInputStream inputStream = null;
BufferedInputStream is = null;
try {
inputStream = request.getInputStream();
is = new BufferedInputStream(inputStream);
while ((len = is.read(bytes)) != -1) {
builder.append(new String(bytes));
}
} catch (IOException e) {
e.printStackTrace();
}finally {
IoUtil.close(inputStream);
IoUtil.close(is);
}
System.out.println(builder.toString());
Map map = JSONUtil.toBean(builder.toString(), Map.class);
return map;
}
如果獲取的流裏面的數據讀取爲空,那可能是因爲在到達Controller之前就有攔截器或者過濾器讀取了一次,所以才爲空,因爲流只能讀取一次,(解決方案看下面)
擴展資料:
MVC
框架獲取請求流數據爲空(request.getInputStream()
)