請求流和響應流(複習筆記)

請求流和響應流

一: 使用響應流進行響應文件(數據,圖片都可以)

	@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;
    }
8B6RZn.png

如果獲取的流裏面的數據讀取爲空,那可能是因爲在到達Controller之前就有攔截器或者過濾器讀取了一次,所以才爲空,因爲流只能讀取一次,(解決方案看下面)

擴展資料:

MVC框架獲取請求流數據爲空(request.getInputStream())

post方法 request.getInputStream()爲空解惑與解決方案

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章