SpringBoot實現接受文件和對象
更新時間:2025年12月06日 09:36:30 作者:LitongZero
SpringBoot中接受文件和對象的場景,推薦使用`multipart/form-data`格式,后端可以通過接受實體并將文件放入對象屬性中來處理數據,使用`@Validated`注解進行參數校驗是可行的,但要注意不要與`@RequestBody`注解同時使用
SpringBoot接受文件和對象
使用場景
某個接口,需要同時接受文件和實體,也就是參數。
- 這個時候,前端就不能json格式傳送數據了,要用到multipart/form-data;這種格式傳送數據。
- 那么,這個時候,后端應該怎樣接受這個參數和文件呢?
1.接受HttpServletRequest,自己處理request(不推薦)
@PostMapping(value = "/upload")
@ResponseBody
public String handleFileUpload(HttpServletRequest request) {
MultipartHttpServletRequest params=((MultipartHttpServletRequest) request);
// 獲取文件
List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("file");
// 獲取參數
String name=params.getParameter("name");
2.接受實體,將文件放到對象屬性中(推薦)
public class UserFileReq {
// 參數
private String username;
// 文件
private MultipartFile file;
// 省略get\set
}
@PostMapping(value = "/upload")
@ResponseBody
public String handleFileUpload(UserFileReq req) {
// 文件和參數 都在實體中了
}
3.接受參數,將文件放到接受參數中
這種方法適合接受單個文件參數,多參數還是建議用對象接受,方便擴展
@PostMapping(value = "/upload")
@ResponseBody
public String handleFileUpload(MultipartFile file) {
}
4.一個坑
使用第二種方法的時候,一定不要加@RequestBody,加了這個注解,就會報如下錯誤。
{
"timestamp": 1571196217195,
"status": 415,
"error": "Unsupported Media Type",
"exception": "org.springframework.web.HttpMediaTypeNotSupportedException",
"message": "Content type 'multipart/form-data;boundary=2gOOYeFBpE;charset=UTF-8' not supported",
"path": "/file/upload"
}
所以,接受文件,不要使用@RequestBody注解
但是@Validated注解(校驗參數的注解)是可以使用的。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
SpringBoot修改yml配置和加載順序規(guī)則的示例詳解
這篇文章主要為大家詳細介紹了SpringBoot如何修改yml配置和加載順序規(guī)則,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2025-08-08
基于Java實現Word中插入附件的操作指南(支持所有文件格式)
文章介紹了如何使用Java在Word文檔中嵌入附件,并通過OLE方式實現,主要步驟包括:引入依賴、組裝附件圖標、默認附件圖標、組裝Ole對象、插入附件到Word文檔以及使用模板,文章末尾提供了實現代碼和下載OLE模板的鏈接,需要的朋友可以參考下2025-12-12

