1. 程式人生 > >SpringMVC_20_使用HttpMessageConverter T 實現了上傳檔案(不推薦)和下載檔案操作

SpringMVC_20_使用HttpMessageConverter T 實現了上傳檔案(不推薦)和下載檔案操作

  • 使用HttpMessageConverter< T>將請求資訊轉化並繫結到處理方法的入參中或將響應結果轉化為對應型別的響應資訊,Spring提供了兩種途徑:
    1. 使用@RequestBody/@ResponseBody對處理方法進行標註
    2. 使用HttpEntity< T>/ResponseEntity< T>作為處理方法的入參或返回值
  • 當控制器處理方法使用到@RequestBody/@ResponseBody或HttpEntity< T>/ResponseEntity< T>時,Spring首先根據請求頭或響應頭的Accept屬性進行匹配的HttpMessageConverter,進而根據引數型別或泛型型別的過濾得到匹配的HttpMessageConverter
    ,若找不到可用的HttpMessageConverter將報錯
  • @RequestBody 和 @ResponseBody不需要成對出現

使用@RequestBody/@ResponseBody對處理方法進行標註:

我們來完成一個檔案上傳的效果,但是不推薦這個上傳方法:

在index.jsp中可以上傳檔案,並且在後臺打印出檔案的內容

在這裡插入圖片描述

1.首先在index.jsp寫一個form表單

<form action="testHttpMessageConverter" method="post" enctype="multipart/form-data">
    File:<
input
type="file" name="file"/>
Desc:<input type="text" name="" id="desc"/> <input type="submit" value="Submit"> </form>

2.寫上響應方法

@ResponseBody    //注意的註解
@RequestMapping("/testHttpMessageConverter")
public String testHttpMessageConverter(@RequestBody String body){  //會將請求發過來的檔案轉換為String字串
System.out.println(body); return "helloworld!"+new Date(); //用到了註解 }

成功列印

在這裡插入圖片描述

使用HttpEntity< T>/ResponseEntity< T>作為處理方法的入參或返回值

我們來做出一個檔案下載的效果

1.先在index.jsp寫一個< a>標籤

<a href="testResponseEntity">Test ResponseEntity</a>

2.新增本地檔案到專案中

在這裡插入圖片描述

3.編寫handler處理方法

//檔案下載
@RequestMapping("/testResponseEntity")
public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException {
    byte[] body = null;
    ServletContext servletContext = session.getServletContext();
    InputStream in = servletContext.getResourceAsStream("/files/abc.txt");
    body = new byte[in.available()];
    in.read(body);

    HttpHeaders headers = new HttpHeaders();
    headers.add("Content-Disposition","attachment;filename=abc.txt");

    HttpStatus statusCode = HttpStatus.OK;

    ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(body,headers,statusCode);
    return  response;
}

4.顯示效果

在這裡插入圖片描述